2010-06-14 41 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