将参数中的 NULL 传递给存储过程中的 DateTime 字段

发布于 2024-10-20 06:41:13 字数 634 浏览 2 评论 0原文

我有一个存储过程,它使用我提供的参数更新数据库,但我在将 NULL 传递给存储过程时遇到问题

我需要设为 NULL 的字段是 DateTime 字段

DB.Parameters.AddWithValue("@date", NULL)

这给了我错误

未声明“NULL”。不再支持“Null”常量;使用“System.DBNull”代替

所以我尝试了

DB.Parameters.AddWithValue("@date", DBNull.Value.ToString())

但这会在列中产生值 1900-01-01 00:00:00.000 ,因为它将 "" 传递给字段

我也尝试过

DB.Parameters.AddWithValue("@date", DBNull.Value)

但它产生了这个错误

“System.DBNull”类型的值无法转换为“String”。

有人有什么想法吗?

I have a stored procedure which updates a database using the parameters I supply but I'm having trouble passing a NULL to the stored procedure

The field I need to make NULL is a DateTime field

DB.Parameters.AddWithValue("@date", NULL)

This gives me the error

'NULL' is not declared. 'Null' constant is no longer supported; use 'System.DBNull' instead

So I tried

DB.Parameters.AddWithValue("@date", DBNull.Value.ToString())

But this produces the value 1900-01-01 00:00:00.000 in the column as it's passing a "" to the field

I also tried

DB.Parameters.AddWithValue("@date", DBNull.Value)

But it produces this error

Value of type 'System.DBNull' cannot be converted to 'String'.

Has anybody got any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

燕归巢 2024-10-27 06:41:13

或者,您可以像这样添加参数,如果您的变量为 null,则它会在数据库中为其提供一个 null 值:

DB.Parameters.AddWithValue("@date", myDateTime ?? (object)DBNull.Value);

您需要将其设置为可空类型,如 Amit 提到的那样。

更多详细信息和背景请访问 http://evonet.com.au/overview-of-c-nullable -类型/

Or you can add your parameter like this, which gives it a null value in the database if your variable is null:

DB.Parameters.AddWithValue("@date", myDateTime ?? (object)DBNull.Value);

you need to set it as a nullable type as Amit mentioned.

More details and background available at http://evonet.com.au/overview-of-c-nullable-types/

我纯我任性 2024-10-27 06:41:13

尝试类似的操作,使用 Add 而不是 AddWithValue :

DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;

Try something like this, using Add rather than AddWithValue:

DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;
小女人ら 2024-10-27 06:41:13

试试这个

如果您使用类及其属性并且这些属性值用作参数,那么您可以将

属性的签名更改为

public DateTime? myDateTime = null;// Here ? is used to make the property nullable.

此外,如果您的日期列是 varchar 类型,则将其更正为 Date (Sql2008) / DateTime( 2005)。

//将参数更改为此

@SomeDate datetime = null (as suggested by chris)

允许字段接受null,然后将值传递为

DB.Parameters.Add("@date", DBNull.Value)

Try this

If you are using class and its property and those property values are used as parameter then you can do this

chnage the signature of the property to

public DateTime? myDateTime = null;// Here ? is used to make the property nullable.

Also if your date column is of type varchar then correct it to Date (Sql2008) / DateTime(2005).

//change parameter to this

@SomeDate datetime = null (as suggested by chris)

Allow the field to accept null and then pass the value as

DB.Parameters.Add("@date", DBNull.Value)
埋情葬爱 2024-10-27 06:41:13

这是一个例子。这对我来说是工作

if(obj.myDate == DateTime.MinValue)
{
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = DBNull.Value;
}
else
{
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = obj.myDate ;
}

This is an example. It's work for me

if(obj.myDate == DateTime.MinValue)
{
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = DBNull.Value;
}
else
{
    aCommand.Parameters.Add("dateParameter", SqlDbType.Date).Value = obj.myDate ;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文