我正在尝试使用VB将数据插入数据库

时间:2020-04-23 08:08:48

标签: mysql database vb.net visual-studio command

我正在尝试使用vb在mySql数据库中添加新数据。但是错误总是表明[unit_type]不允许为null。我什至更改了主数据库中列的设置。我禁用了非null复选框。

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 :(得分:0)

通过尝试使用参数,您做对了事情,但是做错了。您已将参数添加到命令中,但是您仍然插入了文字值,而不是在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)"

然后我认为在创建参数名称时,还需要在参数名称上添加“ @”前缀。

答案 1 :(得分:0)

将数据库对象保留在本地,这样就可以确保它们已关闭并已处置。即使有错误,Using...End Using块也会为您处理。

直到直接在.Execute之前打开连接。

我假设date_created的类型为Date

包含参数的数据类型可以提高sql的效率。

如果您在“尝试/捕获”中所做的所有操作都在关闭连接,则说明您吞咽了错误。

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