Дата разбора из VB.NET для SQL INSERT - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть веб-приложение с формой, которую я пытаюсь передать на сервер ASP.NET (используя VB.NET), а затем на таблицу MS SQL Server. Форма использует указатель даты jQuery в нескольких текстовых полях и форматирует их как MM/dd/yyyy. Затем поля формы передаются через PageMethod на веб-сервер, который принимает различные значения полей и объединяет их в команду SQL UPDATE.

Я постоянно получаю следующую ошибку, когда пытаюсь выполнить команду SQL:

Conversion failed when converting date and/or time from character string.

Вот код на сервере:

Using myConn As New System.Data.SqlClient.SqlConnection(CString.ConnectionString)
    myConn.Open()

    Dim cmd As New System.Data.SqlClient.SqlCommand("UPDATE table " & _
                             "SET type = '" & type & "', " & _ 
                                 "target = '" & "@target" & "', " & _
                                 "patient = '" & patient & "', " & _
                                 "dob = '" & "@dob" & "' " & _   
                             "WHERE serial = '" & serial & "'", myConn)


    cmd.Parameters.Add(SqlParameter("@target", Data.SqlDbType.Date))       
    cmd.Parameters.Add(SqlParameter("@dob", Data.SqlDbType.Date))

    If target = "" Then
        cmd.Parameters("@target").Value = Data.SqlTypes.SqlDateTime.Null
    Else
        cmd.Parameters("@target").Value = target
    End If

    If dob = "" Then
        cmd.Parameters("@dob").Value = Data.SqlTypes.SqlDateTime.Null
    Else
        cmd.Parameters("@dob").Value = dob
    End If

    cmd.ExecuteNonQuery()

End Using

Примечание. Я испробовал около двадцати различных способов анализа дат, преобразования их в даты, изменения форматов, и ни один из них не сработал.

Примечание 2. Условные операторы в конце просто предотвращают сохранение пустых полей даты в БД SQL как «1/1/1900», а не как фактическое значение SQL NULL. Однако после отладки создается впечатление, что проблема не в этом, а в том, что при наличии фактического значения возникает ошибка.

Если кто-нибудь увидит, что я делаю неправильно, и как я могу это исправить, это будет с благодарностью. Заранее спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Вы смешиваете свои параметризованные и не параметризованные части (почему вы не все параметрируете?)

Dim cmd As New System.Data.SqlClient.SqlCommand("UPDATE table " & _
                         "SET type = '" & type & "', " & _ 
                             "target = @target, " & _
                             "patient = '" & patient & "', " & _
                             "dob = @dob " & _   
                         "WHERE serial = '" & serial & "'", myConn)
0 голосов
/ 01 февраля 2012

Вы включаете время? Поля DateTime требуют даты и времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...