2010-06-14 61 views
1

我改變了舊的,脆弱的SqlCommands與SqlParameters卻得到了一個SQLEXCEPTION:轉換失敗:SqlParameter的和DateTime

System.Data.SqlClient.SqlException { 「從字符串轉換日期時間時,轉換失敗。」}

sqlCommand.ExecuteScalar

Dim sqlString As String = _ 
    "SELECT TOP 1 " & _ 
     "fiSL " & _ 
    "FROM " & _ 
     "tabData AS D " & _ 
    "WHERE " & _ 
     "D.SSN_Number = '@SSN_Number' " & _ 
    "AND D.fiProductType = 1 " & _ 
    "AND D.Repair_Completion_Date > '@Repair_Completion_Date' " & _ 
    "ORDER BY " & _ 
     "D.Repair_Completion_Date ASC"  

Dim obj As Object 
Dim sqlCommand As SqlCommand 
Try 
    sqlCommand = New SqlCommand(sqlString, Common.MyDB.SqlConn_RM2) 
    sqlCommand.CommandTimeout = 120 
    sqlCommand.Parameters.AddWithValue("@SSN_Number", myClaim.SSNNumber) 
    sqlCommand.Parameters.AddWithValue("@Repair_Completion_Date", myClaim.RepairCompletionDate) 
    If Common.MyDB.SqlConn_RM2.State <> System.Data.ConnectionState.Open Then Common.MyDB.SqlConn_RM2.Open() 
     obj = sqlCommand.ExecuteScalar() 
Catch ex As Exception 
    Dim debug As String = ex.ToString 
Finally 
    Common.MyDB.SqlConn_RM2.Close() 
End Try 

myClaim.RepairCompletionDate是SQLDATETIME。 我必須刪除sqlString中的引號以比較日期列嗎?但後來我沒有得到例外,但結果不正確。

+0

順便說一句,只有當日期時間類型具有適當的格式時,纔可以將日期時間類型與字符串進行比較。 ''2010-06-14'' – abatishchev 2010-06-14 09:30:30

回答

1

是的,報價應該刪除。你不應該在T-SQL中引用參數 - 即使在使用字符串時也是如此。因此,您應該刪除@SSN_Number@Repair_Completion_Date附近的報價。

+0

好的。我以爲我刪除引號時得到不正確的結果,但我只刪除了Repair_Completion_Date列的報價而不是SSN_Number。因此,sqlCommand.ExecuteScalar一直沒有。刪除兩個引號時,似乎都可以。謝謝。 – 2010-06-14 09:34:50