vb.net SQL проблема преобразования даты в время - PullRequest
0 голосов
/ 27 марта 2011

Ошибка: преобразование не выполнено при преобразовании даты и / или времени из символьной строки.

По сути, я пытаюсь сделать так, чтобы, когда кто-то щелкает место в списке, оно увеличивало правильное полев таблице статистики на 1, чтобы сказать, что они нажали на местоположение.Я пытался решить это некоторое время и не могу никуда добраться.Моя дата в формате даты, как и поле «Дата» в моей таблице статистики.Мой код можно увидеть ниже.

    Dim Current As String
    Dim Check As String
    Dim objCmd2 As Object
    Dim iCount As Integer
    Dim tDate As Date

    Current = LocBox.SelectedItem

    Check = LocList.FindString(Current)

    If Check > -1 Then
        MsgBox("You have already selected this place to visit")
    Else
        LocList.Items.Add(Current)
        ObjDataReader.Close()
        tDate = Date.Today
        MessageBox.Show(tDate)
        tDate = tDate.ToString()
        objCmd2 = New SqlCommand("SELECT " & Replace(Current, " ", "_") & " FROM Stats WHERE Date = '" & tDate & "'", objConn)
        ObjDataReader = objCmd2.ExecuteReader
        If ObjDataReader.HasRows Then
            ObjDataReader.Read()
            If ObjDataReader(0) Is DBNull.Value Then
                iCount = 0
            Else
                iCount = ObjDataReader(0)
            End If
        Else
            iCount = 0
        End If
        objCmd = New SqlCommand("INSERT INTO Stats(Date," & Replace(Current, " ", "_") & ") Values('" & tDate.Date & "'," & iCount & " )", objConn)
        ObjDataReader.Close()
        objCmd.ExecuteNonQuery()
        objConn.Close()

Заранее спасибо.

Проблема возникает со вторым оператором SQL, я думаю.Я не понимаю, почему добавление даты в поле даты было бы проблемой, я пытался добавить ее в виде строки, которая не работала.Спасибо за ответы на все вопросы.

Ответы [ 4 ]

1 голос
/ 27 марта 2011

Как указывает Мартин, это, вероятно, лучший выбор:

int colnum = ConvertColumnNameToNumber(Current)
objCmd2 = New SqlCommand("SELECT "+colnum.ToString()+" FROM Stats WHERE [Date] = @inDate", objConn)
objCmd2.Parameters.Add("@inDate",SqlDbType.DateTime).value = tDate

Не проверенные или скомпилированные могут иметь опечатки.

Обратите внимание на использование colnum выше.Поскольку вы не можете использовать параметры для имен столбцов, вы должны использовать номер столбца.Если у вас есть код, который возвращает целое число в качестве возвращаемого значения, вы можете защитить от внедрения (это может быть только число).

0 голосов
/ 27 марта 2011

Попробуйте удалить апострофы из-за времени tdate, чтобы оно было ...

objCmd2 = New SqlCommand("SELECT " & Replace(Current, " ", "_") & " FROM Stats WHERE Date = " & tDate, objConn) 

и

objCmd = New SqlCommand("INSERT INTO Stats(Date," & Replace(Current, " ", "_") & ") Values(" & tDate.Date & "," & iCount & " )", objConn) 
0 голосов
/ 27 марта 2011

Я могу быть неосновным, но у вас есть tDate в качестве типа переменной Date, а затем вы пытаетесь отправить ей строку, вы можете просто использовать tDate.ToString () в строках SqlCommand и не преобразовывать ее первыми.

0 голосов
/ 27 марта 2011

Я предполагаю, что проблема здесь: MessageBox.Show (tDate)

Вам необходимо преобразовать дату в строку, используя tDate.ToString или любой другой метод, который вы хотите.

Вы получаете ошибки компиляции? Я всегда кодирую с Option Strict On, и ваш код обязательно вызовет ошибки, когда вы не конвертируете переменные.

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