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

时间:2011-10-12 04:09:01

标签: c# oledb

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

对于SQL Server表中的每一行,我正在检查如果timestamp字段为NULL,则将NULL插入相应的Access字段中。

在此处粘贴一个小代码段:

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();

}

我尝试为@ 3(DBTimeStamp)参数插入DbNull.Value。但它不起作用。我收到以下错误:

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

如何使用OleDbParameter为DBTimeStamp字段传递NULL?

4 个答案:

答案 0 :(得分:1)

我认为您应该从数据库表中为您获得异常的字段选择allow nulls constrain。

否则,您忘记为代码中的任何字段赋值,并且它不允许空值约束。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

答案 3 :(得分:0)

刚刚介入此问题:  重要的是要知道OLEDB Paramaters必须有序。无论使用什么名称。 将参数完全按照与SQL字符串中的appereance相对应的顺序添加到命令对象。