Я пытаюсь вставить данные в базу данных с помощью VB - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь добавить новые данные в базу данных mySql, используя vb. Но ошибка всегда говорит, что [unit_type] не может быть нулевым. Я даже изменил настройку столбца в основной базе данных. Я снял флажок «Не ноль».

Dim datetoday = Date.Today

Try
    command = "INSERT INTO assets_table ([date_created], [unit_type]) VALUES ('" & datetoday & "' , '" & frm_viewAssets.lbl_fetch.Text & "')"

    Dim cmd As MySqlCommand = New MySqlCommand(command, myconn.open())

    cmd.Parameters.Add(New MySqlParameter("date_created", CType(datetoday, String)))
    cmd.Parameters.Add(New MySqlParameter("unit_type", CType(frm_viewAssets.lbl_fetch.Text, String)))

    Try
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        myconn.close()
    Catch ex As Exception
        myconn.close()
    End Try

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Храните объекты базы данных локально, чтобы вы могли быть уверены, что они закрыты и удалены. Блоки Using...End Using будут обрабатывать это для вас, даже если возникнет ошибка.

Не открывайте соединение до тех пор, пока непосредственно перед .Execute.

Я предположил, что тип date_created является Date.

Это может повысить эффективность вашего sql, включив в него типы данных ваших параметров.

Если все, что вы делаете в своем Try / Catch, это закрытие соединения, которым вы являетесь просто глотает ошибки.

Private Sub OPCode()
    Dim datetoday = Date.Today
    Dim Command = "INSERT INTO assets_table ([date_created], [unit_type]) VALUES (@date_created , @unit_type);"
    Using myconn As New MySqlConnection("Your connection string"),
            cmd As New MySqlCommand(Command, myconn)
        cmd.Parameters.Add("@date_created", MySqlDbType.Date).Value = datetoday
        cmd.Parameters.Add("@unit_type", MySqlDbType.VarChar).Value = frm_viewAssets.lbl_fetch.Text
        myconn.Open()
        cmd.ExecuteNonQuery()
    End Using
End Sub
0 голосов
/ 23 апреля 2020

Вы сделали правильную вещь, пытаясь использовать параметры, но вы сделали это неправильно. Вы добавили параметры в команду, но вместо использования заполнителей параметров в вашем SQL вы по-прежнему вставляли литеральные значения. Это:

command = "INSERT INTO assets_table ([date_created], [unit_type]) VALUES ('" & datetoday & "' , '" & frm_viewAssets.lbl_fetch.Text & "')"

должно быть так:

command = "INSERT INTO assets_table ([date_created], [unit_type]) VALUES (@date_created, @unit_type)"

, и тогда я думаю, что вам нужно будет добавить префикс "@" к именам параметров при их создании.

...