试图将NULL传递给时间戳字段时出错

本文关键字:时间戳 字段 出错 NULL | 更新日期: 2023-09-27 18:10:56

我正在尝试从SQL Server表中插入记录到Access表。

对于SQL Server表中的每一行,我正在检查一个条件,如果时间戳字段是NULL,那么在相应的访问字段中插入NULL。

粘贴一小段代码:

foreach (DataRow dr in dra)  //Each datarow in SQL Server table
{
    OleDbCommand accessCmdUpdate = new OleDbCommand("update xxx set xxxID=@0,xxxNotes=@2,xxxdatetime=@3 where xxxID=@1", AccessConnection);
    accessCmdUpdate.Parameters.Add(new OleDbParameter("@0", dr[0].ToString()));
    accessCmdUpdate.Parameters.Add(new OleDbParameter("@1", dr[1].ToString()));
    accessCmdUpdate.Parameters.Add(new OleDbParameter("@2", convertedText));
    if (dr[3] != System.DBNull.Value)
        accessCmdUpdate.Parameters.Add(new OleDbParameter("@3",OleDbType.DBTimeStamp,100,ParameterDirection.Input,true,(byte)(100),(byte)(0),"xxxdatetime",DataRowVersion.Current,Convert.ToDateTime(dr[3])));
    else
        accessCmdUpdate.Parameters.Add(new OleDbParameter("@3", OleDbType.DBTimeStamp, 100, ParameterDirection.Input, true, (byte)(100), (byte)(0), "xxxdatetime", DataRowVersion.Current, DBNull.Value));
    accessCmdUpdate.ExecuteNonQuery();
}

我已经尝试插入DbNull。@3 (DBTimeStamp)参数的值。但这行不通。我得到以下错误:

System.Data.OleDb。oledbexcexception: 一个或多个必需参数没有给定值。参数@0和@2插入正确

我如何通过NULL DBTimeStamp字段使用OleDbParameter?

试图将NULL传递给时间戳字段时出错

我认为你应该选择允许null约束从数据库表的字段,你得到异常

否则你会忘记给代码中的任何字段赋值,而且它不允许null约束

请验证SQL语句中使用的tablefields的名称

这个问题已经在这个论坛解决了

http://forums.asp.net/p/1729383/4637110.aspx/1?Re +错误+在+努力+ +通过零+ + + + +时间戳字段

刚刚谈到这个问题:重要的是要知道OLEDB参数必须是有序的。不管用什么名字。

按照与SQL字符串中的外观相对应的顺序向命令对象添加参数。