我的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);
我没有收到任何错误,但在查询中它没有采取' '
答案 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,这解决了我的日期参数问题