13

我有一个表,其中有一些日期时间类型的列。我使用存储过程将值插入表中。在存储过程中,我有接受 null 以插入表中的变量。我的问题是当我尝试将空值插入表的日期时间列时会引发错误。我的代码是。

    System.Data.SqlTypes.SqlDateTime getDate;
//set DateTime null
getDate = SqlDateTime.Null;

if (InsertDate.Text == "")
{
cmd1.Parameters["@InsertDate"].Value = getDate;
}
else
{
cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
}
4

11 回答 11

16
cmd1.Parameters["@InsertDate"].Value = getDate ?? DBNull.Value;

键是 DBNull.Value。我想你有一个可为空的 DateTime 变量,即DateTime? someVariable. 您可以测试它是否为 null 以及是否使用DBNull.Value(如上所示)。

于 2013-08-07T08:45:28.567 回答
9
if (//some condition)   
{
   cmd.Parameters.AddWithValue("@dateofBirth", txtdob.text);
}
else 
{ 
   cmd.Parameters.AddWithValue("@dateofBirth", DBNull.Value); 
}
于 2014-03-25T09:29:29.693 回答
5

要将空值传递给 db,您可以使用 DBNull.Value。请试试这个

 if (string.IsNullOrWhiteSpace(InsertDate.Text))
  {
   cmd1.Parameters["@InsertDate"].Value =DBNull.Value;
  }
 else
  {
   cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
  }
于 2013-08-07T10:17:14.830 回答
4

尝试使用这个

System.Data.SqlTypes.SqlDateTime.Null
于 2017-11-26T06:09:07.917 回答
3

首先,要能够插入null到数据库列中,该列必须接受nulls。在设计器中打开表,查看相关列是否可为空。如果不是,并且您尝试插入空值,您将收到错误消息:

无法将值 NULL 插入列“InsertDate”、表“TableName”;列不允许空值。

也就是说,由于您使用存储过程来插入数据,我建议在过程级别使用默认值作为参数,而不是增加应用程序代码的负担。比,你不能在应用程序端设置参数,它会正常工作:

 create procedure InsertIntoTable
   -- ....other parameters here...
   @InsertDate datetime = null -- this means that if the value is not supplied, 
                               -- null is used by default
 as begin
   insert into TableName (InsertDate) values (@InsertDate)
 end

在 C# 方面,只需执行以下操作:

if (!string.IsNullOrWhitespace(InsertDate.Text)) {
  // check to see if the entered text is actually a date
  DateTime insertDate = ... some parsing/verification code...;
  cmd1.Parameters["@InsertDate"].Value = insertDate;
}

注意没有else分支,所以如果InsertDate为空,则根本不发送参数。

于 2013-08-07T09:02:01.537 回答
2

尝试这样的事情,使用 Add 而不是 AddWithValue..

DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;
于 2016-04-22T11:25:27.247 回答
1

您应该能够null直接作为参数值提供:

if (String.IsNullOrWhitespace(InsertDate.Text)) {
    cmd1.Parameters["@InsertDate"].Value = null;
} else {
    cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
}

也切换到使用String.IsNullOrWhitespace()来检查空字符串。

于 2013-08-07T08:44:14.997 回答
0

尝试使用:

if (string.IsNullOrWhiteSpace(InsertDate.Text))
{
    cmd1.Parameters["@InsertDate"].Value = getDate;
}
else
{
    cmd1.Parameters["@InsertDate"].Value = InsertDate.Text;
}
于 2013-08-07T08:56:34.963 回答
0

在存储过程中执行以下操作:

insert into table(date)
values(case when @InsertDate ='' then 
               null 
            else 
               @insertDate 
       end)
于 2013-08-07T08:43:41.050 回答
0

你可以使用这个。我没有捷径!!

if (InsertDate.Text == "") cmd.Parameters.AddWithValue("@enddate", DBNull.Value ); 否则 cmd.Parameters.AddWithValue("@enddate", Convert.ToDateTime(InsertDate.Text) );

于 2019-12-16T23:21:19.847 回答
0

如果 DBNull.Value 不起作用,请尝试此逻辑 .. 使用 DateTime?无效的

确保您的数据库字段应允许为空

dtexpiry!=null?dtexpiry :(DateTime?) null

于 2018-07-05T11:24:07.800 回答