2011-10-12 61 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相對應的順序添加到命令對象中。

相關問題