C# DateTime参数为null时的C INSERT到SQL方法异常

C# DateTime参数为null时的C INSERT到SQL方法异常,c#,sql,C#,Sql,我的一个参数如下所示: cmd.Parameters。Add@last_sign_in_at,SqlDbType.DateTime.Value=user.last\u sign\u in\u at; 我知道用户在最后一次签名时有空值。数据库接受此列的空值,但我得到一个异常: SqlException:参数化查询'@id int,@name nvarchar18,@username nvarchar11,@state nvarch'需要未提供的参数'@last\u sign\u in\u at'

我的一个参数如下所示:

cmd.Parameters。Add@last_sign_in_at,SqlDbType.DateTime.Value=user.last\u sign\u in\u at; 我知道用户在最后一次签名时有空值。数据库接受此列的空值,但我得到一个异常:

SqlException:参数化查询'@id int,@name nvarchar18,@username nvarchar11,@state nvarch'需要未提供的参数'@last\u sign\u in\u at'


您应该使用DBNull。值:

cmd.Parameters.Add("@last_sign_in_at", SqlDbType.DateTime).Value = (object)user.last_sign_in_at ?? (object)DBNull.Value;

在这里对对象进行强制转换仅适用于操作员??要不抱怨不同的类型,应使用DBNull.Value:

cmd.Parameters.Add("@last_sign_in_at", SqlDbType.DateTime).Value = (object)user.last_sign_in_at ?? (object)DBNull.Value;

在这里对对象进行强制转换仅适用于操作员??为了在使用原始.net framework时不抱怨不同的类型,我总是必须使用值DBNull.value


在使用原始.net framework时,我总是必须使用值DBNull.value


运算符“??”不能应用于“DateTime”类型的操作数,而“DBNull”应使用objectuser.last_sign_in_at??objectDBNull.ValueI使用了cmd.Parameters。Add@last_sign_in_at,SqlDbType.DateTime.Value=user.last\u sign\u in\u at??日期时间。今天;但那不是空的,你什么意思?插入今天的时间后,应该使用DBNull.Value,这也很明显,如果SQL TableOperator中的列可为Null,则“??”不能应用于“DateTime”类型的操作数,而“DBNull”则应使用objectuser.last_sign_in_at??objectDBNull.ValueI使用了cmd.Parameters。Add@last_sign_in_at,SqlDbType.DateTime.Value=user.last\u sign\u in\u at??日期时间。今天;但那不是空的,你什么意思?您插入了今天的时间,您应该使用DBNull.Value,这也很明显,如果您的列在SQL表中为NULL,那么user.last\u sign\u in_at并不总是NULL,但是当它为NULL时,方法trows一个例外,但是user.last\u sign\u in_at不总是NULL,但是当它为NULL时,方法trows一个例外IP:如果您使用Dapper,它为您提供了这样的功能,并且避免了大量代码:连接。Execute@...SQL...,新{user.last_sign_in_at};提示:如果您使用Dapper,它会为您提供类似这样的服务,并避免了大量代码:连接。Execute@...SQL...,新{user.last_sign_in_at};