是否可以从代码后面将空参数传递给sql server?

时间:2014-04-22 11:18:30

标签: c# sql-server parameter-passing

我的SQL查询中只有少数参数只接受' '值不会接受null,所以我想通过'''值作为参数如何可能,下面是我正在尝试做的代码

param = new SqlParameter("@CodeNumber", SqlDbType.VarChar);
if (!string.IsNullOrEmpty(SearchCriteria.CodeNumber))
  {
     param.Value = SearchCriteria.CodeNumber;
  }
else
  {
    param.Value = DBNull.Value;
    //param.Value = ''; I want to pass something like this
  }
cmd.Parameters.Add(param);


param = new SqlParameter("@LicenseDate", SqlDbType.DateTime);
if (SearchCriteria.LicenseDate != null && SearchCriteria.LicenseDate != default(DateTime))
  {
      param.Value = SearchCriteria.LicenseDate;
  }
else
  {
     param.Value = DBNull.Value;
     //param.Value = ''; I want to pass something like this
   }
cmd.Parameters.Add(param);

我没有收到任何错误,但在查询中它没有采取' '

3 个答案:

答案 0 :(得分:0)

当基础字段为String时,尝试传递空varchar作为参数。例如,您可以这样做:

param = new SqlParameter("@CodeNumber", SqlDbType.VarChar);
 if (!string.IsNullOrEmpty(SearchCriteria.CodeNumber))
  {
   param.Value = SearchCriteria.CodeNumber;
  } 
 else
  {
   param.Value = String.Empty;    
  }
cmd.Parameters.Add(param);

对于DateTime,SQL Server会将空字符串插入DateTime列插入值1/1/1900 12:00:00 AM,如here所示。因此,代替空字符串,您可以在C#中传递此值DateTime,如下所示:

param = new SqlParameter("@LicenseDate", SqlDbType.DateTime);
 if (SearchCriteria.LicenseDate != null && SearchCriteria.LicenseDate != default(DateTime))
  {
   param.Value = SearchCriteria.LicenseDate;
  }
 else
  {
   param.Value = new DateTime(1900,1,1,0,0,0)
   }
cmd.Parameters.Add(param);

答案 1 :(得分:0)

您可以使用默认值创建存储过程,如下所示;

CREATE PROCEDURE [dbo].[SP] 
    @param1 varchar(512),
    @param2 varchar(50) = NULL 
AS

然后,如果传递该值,将获取通过参数传递的值。它可以从应用程序(c#代码)跳过,如果跳过,将采用默认的NULL值。

因此,在这种情况下,当应用程序不需要时,可以跳过@ param2。

如果不是null,而不是NULL,则可以传递'',如下所示

CREATE PROCEDURE [dbo].[SP] 
    @param1 varchar(512),
    @param2 varchar(50) = ''
AS
BEGIN

答案 2 :(得分:0)

我修改了我的查询并检查@LicenseDate是否为null然后在SP中将值设置为空,并且从后面的代码我传递了DBNull.Value,这解决了我的日期参数问题