C# 是否可以将空参数从代码隐藏传递到sql server?

C# 是否可以将空参数从代码隐藏传递到sql server?,c#,sql-server,parameter-passing,C#,Sql Server,Parameter Passing,我的SQL查询中只有很少的参数只接受“”值,它不会接受null,所以我想将值作为参数传递。这是怎么可能的,下面是我正在尝试执行的代码 param = new SqlParameter("@CodeNumber", SqlDbType.VarChar); if (!string.IsNullOrEmpty(SearchCriteria.CodeNumber)) { param.Value = SearchCriteria.CodeNumber; } else { pa

我的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);
我没有收到任何错误,但在查询中它没有作为“”

尝试在基础字段为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,如图所示。因此,您可以在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);

可以使用如下所示的默认值创建存储过程:

CREATE PROCEDURE [dbo].[SP] 
    @param1 varchar(512),
    @param2 varchar(50) = NULL 
AS
然后,如果传递该值,则将获取通过参数传递的值。可以从应用程序c代码中跳过它,如果跳过,将采用默认的空值

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

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

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

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

传递字符串如何?当然,这对DateTime参数不起作用。DBA编写了一个查询,其中我必须只传递“”个,但在TSQL中这是一个空字符串。你试过在C中传递空字符串作为参数吗?空字符串而不是char param如何;DateTime会给出什么错误?如果不应该为NULL呢?它是默认值,可以为NULL或空字符串。请忽略我的注释,因为我是在您添加not NULL大小写之前写的。