代码如下:
SqlCommand cmd = new SqlCommand("UserIsExict",conn);
cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Add(new SqlParameter("@Uid",SqlDbType.Binary,30));
cmd.Parameters["@Uid"].Value = Encoding.UTF32.GetBytes(paraUid);cmd.Parameters.Add(new SqlParameter("@UserName",SqlDbType.Binary,30));
cmd.Parameters["@UserName"].Direction = ParameterDirection.Output;conn.Open();
cmd.ExecuteNonQuery();
conn.Close();想获取cmd中的参数"@UserName"的值且转换为string类型,参数"@UserName"是binary类型的,

解决方案 »

  1.   

    string str;
    str = cmd.Parameters["@UserName"].value.ToString();
      

  2.   

    ParameterDirection.Output;改为: ParameterDirection.ReturnValue;
      

  3.   

    Convert.FromBase64String(inputValue);
    那怎么将inputValue的值转换成byte[]类型
      

  4.   

    将byte[]转换为string Convert.ToBase64String(inputValue);
    将string转换为byte[] Convert.FromBase64String(inputValue);
      

  5.   

    但是cmd.Parameters["@UserName"].value的类型是Object类型的啊
      

  6.   

    ParameterDirection.Output;改为: ParameterDirection.ReturnValue;我试过了,好像不可以
      

  7.   

    Sql 的Binay 对应用 byte[]来接收
    byte[] b = cmd.Parameters["@UserName"].value;从byte[]到string 的转化 需要提供编码类型
    就是说你必须清楚 数据库中以binary形式存放的字符串是那种编码的一般就2种: System.Text.Encoding.Default 
    或者System.Text.Encoding.UTF8
      

  8.   

    从你上面的代码看
    可能都是用的UTF32byte[] b = cmd.Parameters["@UserName"].value;
    string sUserName = Encoding.UTF32.GetString(b);
      

  9.   

    byte[] b = cmd.Parameters["@UserName"].value;
    string sUserName = Encoding.UTF32.GetString(b);
    错误 1 无法将类型“object”隐式转换为“byte[]”。存在一个显式转换(是否缺少强制转换?)
      

  10.   

    object类型又要如何转换成byte[]类呢?谢谢!
      

  11.   

    代码如下:
    SqlCommand cmd = new SqlCommand("UserIsExict",conn);
    cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Add(new SqlParameter("@Uid",SqlDbType.Binary,30));
    cmd.Parameters["@Uid"].Value = Encoding.UTF32.GetBytes(paraUid);cmd.Parameters.Add(new SqlParameter("@UserName",SqlDbType.Binary,30));
    cmd.Parameters["@UserName"].Direction = ParameterDirection.Output;conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();想获取cmd中的参数"@UserName"的值且转换为string类型,参数"@UserName"是binary类型的,用:
    byte[] b = cmd.Parameters["@UserName"].value;
    string sUserName = Encoding.UTF32.GetString(b);但又出现以下错误:
    错误 1 无法将类型“object”隐式转换为“byte[]”。存在一个显式转换(是否缺少强制转换?)
      

  12.   

    代码如下:
    SqlCommand cmd = new SqlCommand("UserIsExict",conn);
    cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Add(new SqlParameter("@Uid",SqlDbType.Binary,30));
    cmd.Parameters["@Uid"].Value = Encoding.UTF32.GetBytes(paraUid);cmd.Parameters.Add(new SqlParameter("@UserName",SqlDbType.Binary,30));
    cmd.Parameters["@UserName"].Direction = ParameterDirection.Output;conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();想获取cmd中的参数"@UserName"的值且转换为string类型,参数"@UserName"是binary类型的,用:
    byte[] b = cmd.Parameters["@UserName"].value;
    string sUserName = Encoding.UTF32.GetString(b);但又出现以下错误:
    错误 1 无法将类型“object”隐式转换为“byte[]”。存在一个显式转换(是否缺少强制转换?)
      

  13.   

    byte[] b = (byte[])cmd.Parameters["@UserName"].value;
      

  14.   

    转化还是出错,说是不能将DBNull值转换在byte[]
    但是我把数据库的类型改成char时得到值是正确的,为什么用binary类型时就成为空了
      

  15.   

    你数据库中 UserName 字段是什么类型的?
      

  16.   

    是binary类型的
    但改成char类型时可以,如果是binary类型就出现不能将DBNull值转换在byte[]
      

  17.   

    但是数据库要求用binary类型的
      

  18.   


    你可以在强制转化前 单独判断一下是否为空
    byte[] b = 
    (cmd.Parameters["@UserName"].value==null)?
    new byte[0]:
    (byte[])cmd.Parameters["@UserName"].value;
      

  19.   

    是不是存储过程 UserIsExict 没有返回值?
      

  20.   

    那为什么我将字段改成char型时又有返回值呢?
    数据库:
    CREATE procedure UserIsExict
    @Uid binary(30),
    @UserName binary(30) output
    as
    select @UserName=UserName from AlbumLogin where Uid=@Uid
    GO
    程序:
    SqlCommand cmd = new SqlCommand("UserIsExict",conn);
            cmd.CommandType = CommandType.StoredProcedure;        cmd.Parameters.Add(new SqlParameter("@Uid", SqlDbType.Binary, 30));
            cmd.Parameters["@Uid"].Value = Encoding.UTF32.GetBytes(paraUid);        cmd.Parameters.Add(new SqlParameter("@UserName",SqlDbType.Binary,30));
            cmd.Parameters["@UserName"].Direction = ParameterDirection.Output;        conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();      return Encoding.UTF32.GetString( ((byte[])cmd.Parameters["@UserName"].Value) );错误:
    无法将类型为“System.DBNull”的对象强制转换为类型“System.Byte[]”