我试图在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
你尝试使用参数做了正确的事情,但你做错了。你在命令中添加了参数,但是,你没有在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)"
然后我认为你需要在创建参数名的时候也加上"@"前缀。
将数据库对象保持在本地,这样你就可以确定它们已经被关闭和处理了。Using...End Using
即使出现错误,block也会为你处理。
在.Execute之前不要直接打开连接。
我假设date_created的类型是一个......。Date
.
它可以提高你的sql的效率,包括你的参数的数据类型。
如果你在TryCatch中所做的只是关闭连接,你只是在吞下错误。
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