zoukankan      html  css  js  c++  java
  • C#将byte[]转换为string (oracle)

    问题的实际需求是读取oracle数据库表中RAW类型列值,并根据获取的值进行一些查询、插入操作。

    (1)   首先oracleRAW类型,在.NET 中等同于byte[],获取列值。

    添加引用:

    using System.Configuration;

    using System.Data;

    using System.Data.OracleClient;

    OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["CONNSTR"].ToString());

    conn.Open();

    OracleCommand cmd_ApplicationID = conn.CreateCommand();

    cmd_ApplicationID.CommandType = CommandType.Text;

    cmd_ApplicationID.CommandText = "select APPLICATIONID from ORA_ASPNET_APPLICATIONS where LOWEREDAPPLICATIONNAME='"+applicationName.ToLower()+"'";

    OracleDataReader reader_ApplicationID = cmd_ApplicationID.ExecuteReader();

    byte[] arrAPPID=new byte[16];

    if(reader_ApplicationID.Read())

    arrAPPID = reader_ApplicationID.GetValue(0) as byte[];

    或者这样强制转换:arrAPPID = (byte[])reader_ApplicationID.GetValue(0);

     

    (2)   下面想利用获取的列值进行查询操作,关键就是将byte []转换为string类型。因为若不转换,无法正确执行SQL语句,如下错误示例:

    cmd_RoleID.CommandText = "select ROLEID from ORA_ASPNET_ROLES where LOWEREDROLENAME='" + roleName.ToLower() + "' and APPLICATIONID=" + arrAPPID ;

    添加引用:using System.Text;

    定义string类型变量:string APPID=string.Empty;

    A、首先列出网上搜索的一些信息:

    方法1:

    System.Text.UnicodeEncoding converter = new System.Text.UnicodeEncoding();

    byte[] inputBytes =converter.GetBytes(inputString);

    string inputString = converter.GetString(inputBytes);

    方法2:

    string inputString = System.Convert.ToBase64String(inputBytes);

    byte[] inputBytes = System.Convert.FromBase64String(inputString);

     

    B、接着列出一些调试中出现的错误现象:

    获取的byte[]类型值,如下:

    C将byte[]转换为string - 一缕阳光 - 一缕阳光

    语句

    返回值

    APPID = reader_ApplicationID.GetValue(0) as string;

    null

    APPID = System.Convert.ToString(arrAPPID);

    System.Byte[]

    APPID = System.Convert.ToBase64String(arrAPPID);

    KWB+Au5GRKGZ3XDuHSf9tA==

    System.Text.UnicodeEncoding convert = new System.Text.UnicodeEncoding();

    APPID =convert.GetString(arrAPPID);

    )`~ u-26603 ?D輕?'

    (乱码)

    APPID = Encoding.Default.GetString(arrAPPID);

    )`~ u-26603 ?D輕?'

    (乱码)

     

    查看数据表,Oracle数据库表中存储的值为:29607E02EE4644A199DD70EE1D27FDB4

    分析存储结果为十六进制字符,编写函数实现byte[]转换成十六进制string功能即可。

    private string Byte2String(byte[] arrByte)

    {

        StringBuilder sb = new StringBuilder();

        foreach (byte b in arrByte)

        {

            sb.Append(b > 15 ? Convert.ToString(b, 16) : '0' + Convert.ToString(b, 16));

        }

        return sb.ToString();

    }

    调用此函数实现byte[]string的转换,因为数据表中存储值为大写,所以利用ToUpper()方法转换下得到。

    APPID = Byte2String(arrAPPID).ToUpper();

     

    (3)   根据获取的string类型值,进行进一步的操作,例如:

    OracleCommand cmd_UserID = conn.CreateCommand();

    cmd_UserID.CommandType = CommandType.Text;

    cmd_UserID.CommandText = "select USERID from ORA_ASPNET_USERS where LOWEREDUSERNAME='" + userName.ToLower() + "' and APPLICATIONID='" + APPID + "'";

  • 相关阅读:
    Oracle Core 学习笔记二 Transactions 和 Consistency 说明
    Oracle AUTO_SPACE_ADVISOR_JOB 说明
    Windows 下 ftp 上传文件 脚本
    Oracle 11g 中 Direct path reads 特性 说明
    Linux 使用 wget 下载 Oracle 软件说明
    Oracle 10g read by other session 等待 说明
    Oracle 11g RAC INS06006 Passwordless SSH connectivity not set up between the following node(s) 解决方法
    SecureCRT 工具 上传下载数据 与 ASCII、Xmodem、Ymodem 、Zmodem 说明
    Oracle RAC root.sh 报错 Timed out waiting for the CRS stack to start 解决方法
    Oracle RESETLOGS 和 NORESETLOGS 区别说明
  • 原文地址:https://www.cnblogs.com/nx520zj/p/2866163.html
Copyright © 2011-2022 走看看