假如我有个存储过程 P_GetName(@id varchar(20),type varchar(20))当在前台(C#)中调用P_GetName时,如果传入的type值是空值(即一个文本框没有输入数据)在c#代码中如何写才是正确的。

解决方案 »

  1.   

    BEGIN
    IF type IS NULL
       ...
    ELSE
       ...
    END
      

  2.   

    在前台如何写?
    比如这样调用 
    sqlCmd.Parameters.Add("@type", SqlDbType.VarChar, 20).Value = "";  对吗?
    还是
    sqlCmd.Parameters.Add("@type", SqlDbType.VarChar, 20).Value = ''; 
      

  3.   


    sqlCmd.Parameters.Add("@type", SqlDbType.VarChar, 20).Value = "";  对吗?
    就是这样,传入一个空字符串就行了,另外也可在存储过程里面设置默认值
     create procedure prco_dd
    @a nvarchar = ''
    AS
    begin
    ...............
    end
      

  4.   

    sqlCmd.Parameters.Add("@type", SqlDbType.VarChar, 20).Value = null; 
      

  5.   

    楼主,可以在前台代码端判断文本框的内容,如果在指定存储过程参数时,指定一个空类型就可以了
    代码如下:
    ...
    SqlParamater[] Para = new SqlParamater(2;
    if (textBox1.Text =="")
    {
      Para[1] = new SqlParamater("@type",DBNull.Value)
    }
    else
    {
      Para[1] = new SqlParamater("@type",SqlDbType.VarChar,textBox1.Text)
    }
    ...
    @id这个参数自己设经可以了。
      

  6.   

    --修正
    楼主,可以在前台代码端判断文本框的内容,如果在指定存储过程参数时,指定一个空类型就可以了 
    代码如下: 
    ... 
    SqlParamater[] Para = new SqlParamater(2); 
    if (textBox1.Text =="") 

      Para[1] = new SqlParamater("@type",SqlDbType.VarChar,DBNull.Value) 

    else 

      Para[1] = new SqlParamater("@type",SqlDbType.VarChar,textBox1.Text) 

    ... 
    @id这个参数自己设经可以了。
      

  7.   

    在.net中的空值(即文本框中没有输入的情况下),并不是数据库中的null,而是以''保存的(空字符串),需要替换下的。
      

  8.   

    sqlCmd.Parameters.Add("@type", SqlDbType.VarChar, 20).Value = ""; 
      

  9.   

    sqlCmd.Parameters.Add("@type", SqlDbType.VarChar, 20).Value = textbox1.Text.Trim()==string.Empty?DBNull.Value:textbox1.Text;  这样才能满足你的要求.