C# 是否可以将空参数从代码隐藏传递到sql server?
我的SQL查询中只有很少的参数只接受“”值,它不会接受null,所以我想将值作为参数传递。这是怎么可能的,下面是我正在尝试执行的代码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
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大小写之前写的。