我正在尝试从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?
答案 0 :(得分:1)
我认为您应该从数据库表中为您获得异常的字段选择allow nulls constrain。
否则,您忘记为代码中的任何字段赋值,并且它不允许空值约束。
答案 1 :(得分:0)
请验证SQL语句中使用的table
和fields
的名称。
答案 2 :(得分:0)
答案 3 :(得分:0)
刚刚介入此问题: 重要的是要知道OLEDB Paramaters必须有序。无论使用什么名称。 将参数完全按照与SQL字符串中的appereance相对应的顺序添加到命令对象。