我想用vb插入一个数据到数据库中。

问题描述 投票:0回答:1

我试图在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
mysql database vb.net visual-studio command
1个回答
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)"

然后我认为你需要在创建参数名的时候也加上"@"前缀。


0
投票

将数据库对象保持在本地,这样你就可以确定它们已经被关闭和处理了。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
© www.soinside.com 2019 - 2024. All rights reserved.