2014-10-09 120 views
2

我正在使用OleDbCommand插入使用參數的日期/時間字段,並獲取一個異常,指出「條件表達式中的數據類型不匹配」。將日期時間插入到數據庫中

我已經確定的參數引起我的問​​題,並執行以下代碼會導致我的錯誤:

insertCmd.CommandText = "INSERT INTO myTable ([ParameterName]) VALUES (?)" 
insertCmd.Parameters.AddWithValue("@ParameterName", Now) 
insertCmd.Connection = _connection 
return insertCmd.ExecuteNonQuery() 

檢查出是造成這一問題的參數,我得到以下的參數{} @parameterName

ChangeID: 1 
DbType: DateTime {6} 
Direction: Input {1} 
IsNullable: False 
Offset: 0 
OleDbType: DBTimeStamp {135} 
ParameterName: "@ParameterName" 
Precision: 0 
PrecisionInternal: 0 
Scale: 0 
ScaleInternal: 0 
Size: 0 
SourceColumn: "" 
SourceColumnNullMapping: False 
SourceVersion: Current {512} 
Value: #10/9/2014 11:26:15 AM# {Date} 

它看起來被認爲是DbType DateTime,插入到參數中的對象是一個Date對象,但它仍然告訴我,數據類型有問題。

我見過這個問題的大部分地方都試圖將一個字符串寫入日期/時間字段,我絕對沒有這樣做。

+0

你應該是您使用OLEDB與SQL服務器可能被格式化,爲了更好的兼容性,如YYYY-MM-DD – 2014-10-09 15:50:57

+1

?什麼是實際的數據庫列數據類型? – Plutonix 2014-10-09 15:56:50

+2

我最好的猜測是你的數據庫表列沒有被定義爲日期時間。 – 2014-10-09 15:56:54

回答

1
僅使用,因爲它似乎是你的數據庫字段僅日期值(我猜)的日期值

嘗試:

insertCmd.Parameters.AddWithValue("@ParameterName", Now.Date) 

,或者它可能是OLEDB只是由類型混淆,所以自己設置:

Dim p As New OleDbParameter("@parameterName", OleDbType.Date) 
p.Value = Now 
insertCmd.Parameters.Add(p) 
+0

這確實使例外消失,但是該字段在以前的記錄條目中存儲MM/dd/yyyy hh:mm:ss。 (我正在將一些舊軟件轉換爲vb.net) – 2014-10-09 16:06:10

+0

@AndrewMiller更新了帖子。儘量避免使用AddWithValue方法。 OleDB似乎不喜歡DateTime對象。 – LarsTech 2014-10-09 16:08:46

+0

你是對的。它被類型弄糊塗,並將其稱爲OleDbType.DBDate而不是OleDbType.Date。兩者都映射到DateTime,但我猜想在寫入數據庫之前對數據進行的內部檢查發現我的值爲hh:mm:ss,如上所示。 DBDate使用yyyymmdd格式。 – 2014-10-09 16:34:28

相關問題