2011-10-12 60 views
1

我试图从SQL Server表中将记录插入到Access表中。尝试将NULL传递给时间戳字段时出错

对于SQL Server表中的每一行,我正在检查一个条件,如果时间戳字段为NULL,则将NULL也插入到相应的Access字段中。

这里粘贴一小段代码:

foreach (DataRow dr in dra) //Each datarow in SQL Server table 
{ 
    OleDbCommand accessCmdUpdate = new OleDbCommand("update xxx set [email protected],[email protected],[email protected] where [email protected]", 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.Value为@ 3(DBTIMESTAMP)参数。但它不起作用。我收到以下错误:

System.Data.OleDb.OleDbException:未给出一个或多个所需参数的值。 正确插入参数@ 0和@ 2。

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

+0

请提交表格的结构。也许这是一个必填字段? – Fischermaen

+0

对于Access和SQL Server表,Tha表结构完全相同。 这不是一个必填字段,但我必须从SQL Server表中传递所有字段值。 – KhD

+0

你可以验证'convertedText'的值吗? –

回答

0

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

1

我认为你应该选择允许从数据库表中为你的异常的那个领域的空值约束。

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

0

刚刚踏进这个问题: 它知道OLEDB PARAMATERS必须在顺序很重要。不管使用什么名字。 将参数完全按照与SQL字符串中的appendance相对应的顺序添加到命令对象中。

相关问题