我有一个访问数据库我正在尝试通过vb.net和更新语句进行更新。每当我尝试通过单击按钮更新字段时,它会出现“标准表达式中的数据类型不匹配”错误以下是我的代码:
Dim con1 As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Redirection\fakename\Desktop\AccessDBs\MovieCatalog.mdb")
Dim sqlupdate As String
sqlupdate = "UPDATE Table1 SET Title=@Title, YearofFilm=@YearofFilm, Description=@Description, Field1=@Field1 WHERE ID='" & TextBox5.Text & "'"
Dim cmd As New OleDbCommand(sqlupdate, con1)
' This assigns the values for our columns in the DataBase.
' To ensure the correct values are written to the correct column
cmd.Parameters.Add(New OleDbParameter("@Title", TextBox1.Text))
cmd.Parameters.Add(New OleDbParameter("@YearofFilm", TextBox2.Text))
cmd.Parameters.Add(New OleDbParameter("@Description", TextBox3.Text))
cmd.Parameters.Add(New OleDbParameter("@Field1", TextBox4.Text))
con1.Open()
cmd.ExecuteNonQuery()
con1.Close()
答案 0 :(得分:0)
首先,对每个值使用参数化查询,ID也应作为参数传递
现在停下来思考数据库字段的数据类型。它们都是字符串类型吗?您的参数都是字符串类型,如果您的某个字段是数字,那么您应该传递一个带有numeric数据类型的参数
例如,Yearoffilm
和ID
似乎是可能的数字字段。
所以
Dim sqlupdate As String
sqlupdate = "UPDATE Table1 SET Title=@Title, YearofFilm=@YearofFilm, " & _
"Description=@Description, Field1=@Field1 WHERE ID=@id"
Using con1 As New OleDbConnection("....")
Using cmd As New OleDbCommand(sqlupdate, con1)
cmd.Parameters.AddWithValue("@Title", TextBox1.Text)
cmd.Parameters.AddWithValue("@YearofFilm", Convert.ToInt32(TextBox2.Text))
cmd.Parameters.AddWithValue("@Description", TextBox3.Text)
cmd.Parameters.AddWithValue("@Field1", TextBox4.Text)
cmd.Parameters.AddWithValue("@id", Convert.ToInt32(TextBox5.Text))
con1.Open()
cmd.ExecuteNonQuery()
End Using
End Using
Field1是个谜。如果它是一个数字字段,那么也尝试转换它。