我正在尝试使用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
答案 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