RT

解决方案 »

  1.   


    //这样呢?
    byte[] val = new byte[0];
    //一般对于图片列,都是先检测有没有对这段进行相关赋值操作,没有直接忽略此字段,自然就是空的了,没必要赋个空值给它
      

  2.   

    以下代码没有问题。
    create procedure [dbo].[selectNull]
    @a int,
    @b binary output,
    @c nvarchar(100) output
    as
    begin
    set @b=null
    set @c='im c'
    endusing (SqlConnection con = new SqlConnection("server=localhost;database=test;uid=sa;pwd=xx;"))
                {
                    using (SqlCommand cmd = new SqlCommand("dbo.selectNull", con))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
                        cmd.Parameters.Add(new SqlParameter("@b", SqlDbType.Binary, 100));
                        cmd.Parameters.Add(new SqlParameter("@c", SqlDbType.NVarChar, 100));                    cmd.Parameters["@b"].Direction = ParameterDirection.Output;
                        cmd.Parameters["@c"].Direction = ParameterDirection.Output;
                        
                        cmd.Parameters["@a"].Value = 1;
                        con.Open();
                        cmd.ExecuteNonQuery();
                        byte[] b = Encoding.Unicode.GetBytes(cmd.Parameters["@b"].Value.ToString());
                        string c = cmd.Parameters["@c"].Value.ToString();                                    }
                }
      

  3.   

    这个@b是输出参数啊...如果@b是个输入参数呢,而且这输入参数可以是空值。要怎么配置@b啊?
      

  4.   

    看错了。create procedure [dbo].[selectNull]
    @a int,
    @b binary(100),
    @c nvarchar(100) output
    as
    begin
    if (@b is null)
    set @c='b is null'
    else 
    set @c='b is not null'
    endusing (SqlConnection con = new SqlConnection("server=localhost;database=test;uid=sa;pwd=123456;"))
                {
                    using (SqlCommand cmd = new SqlCommand("dbo.selectNull", con))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
                        cmd.Parameters.Add(new SqlParameter("@b", SqlDbType.Binary, 100));
                        cmd.Parameters.Add(new SqlParameter("@c", SqlDbType.NVarChar, 100));                    //cmd.Parameters["@b"].Direction = ParameterDirection.Output;
                        cmd.Parameters["@c"].Direction = ParameterDirection.Output;
                        
                        cmd.Parameters["@a"].Value = 1;
                        cmd.Parameters["@b"].Value = DBNull.Value;//null值
                        con.Open();
                        cmd.ExecuteNonQuery();                    string c = cmd.Parameters["@c"].Value.ToString();                    Console.WriteLine(c);                }
                }
      

  5.   

    可是为什么我用DBNull.Value给@b赋值,为什么不行啊?报错说varchar没有显式转换成Binary.......
      

  6.   

    我用DBNull.Value赋值给sql类型为binary(100)的参数@b时,没有问题。
    存储过程里面检查一下。看看是不是存储过程内部的异常。