2010-06-14 4 views
1

내가 SqlParameters로 이전, 취약 SqlCommands을 변경하지만 SQLEXCEPTION 얻을 해요 :변환 실패 : SqlParameter에와 날짜 시간

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

btw와 같이 적절한 형식이있는 경우에만 날짜 - 시간 유형을 문자열과 비교할 수 있습니다 (예 : "2010-06-14" – abatishchev

답변

1

예, 따옴표는 삭제해야합니다. 문자열을 사용할 때조차도 T-SQL의 매개 변수를 따옴표로 묶어서는 안됩니다. 따라서 @SSN_Number@Repair_Completion_Date 주위의 따옴표를 삭제해야합니다.

+0

아 좋아. 따옴표를 제거 할 때 잘못된 결과가 있다고 생각했지만 SSN_Number가 아닌 Repair_Completion_Date 열의 따옴표 만 제거했습니다. 따라서 sqlCommand.ExecuteScalar는 아무 것도 보관하지 않았습니다. 모두 따옴표를 제거하면 모두 괜찮은 것 같습니다. 감사. –