• 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 + "'";

  • 相关阅读:
    bootstrap插件学习-bootstrap.tooltip.js
    1,2,3维数组去重方法
    使用PHP静态变量当缓存的方法
    深思 PHP 数组遍历的差异(array_diff 的实现)
    ecshop学习五
    ecshop学习四
    ecshop学习三
    ecshop学习二
    ecshop学习一
    linux下安装ecshop
  • 原文地址:https://www.cnblogs.com/nx520zj/p/2866163.html
Copyright © 2020-2023  润新知