从VB.Net应用程序更新/编辑记录到Access数据库时出现问题
嗨,我在将我的VB.Net应用程序中的更正更新到Access数据库时遇到问题。我得到以下错误: “update语句中的语法错误”或“条件表达式中的数据不匹配错误” 下面是代码: 公共函数save1stsemester() '此代码将第一学期记录更新到数据库从VB.Net应用程序更新/编辑记录到Access数据库时出现问题,vb.net,ms-access,sql-update,insert-update,Vb.net,Ms Access,Sql Update,Insert Update,嗨,我在将我的VB.Net应用程序中的更正更新到Access数据库时遇到问题。我得到以下错误: “update语句中的语法错误”或“条件表达式中的数据不匹配错误” 下面是代码: 公共函数save1stsemester() '此代码将第一学期记录更新到数据库 Dim ds As New DataSet Dim dbSource As String Dim conn As New OleDb.OleDbConnection Dim dbcursor As Intege
Dim ds As New DataSet
Dim dbSource As String
Dim conn As New OleDb.OleDbConnection
Dim dbcursor As Integer = 0
Dim da As New OleDb.OleDbDataAdapter
Dim cmdUpdate As New OleDb.OleDbCommand
Dim msg1 As String
Dim style As MsgBoxStyle
Dim result As MsgBoxResult
Dim title, remarks As String
Dim totalgrade As Integer = CInt(txtTotalMK.Text)
Dim totalload As Integer = CInt(txtTotalLoad.Text)
Dim gpadecimal As Decimal
gpadecimal = CDec(lblGPA1.Text)
title = "Success"
style = MsgBoxStyle.Information
Call allremarks() ' this function gathers all the remarks to a single variable.
remarks = allremarks()
Dim failflag As Boolean
If checkflag100() = True Then 'True means all courses were passed then turn on Flag
failflag = True
Else
failflag = False
End If
If conn.State = ConnectionState.Open Then
GoTo cont
Else
If conn.State = ConnectionState.Closed Then
dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
dbSource = "Data Source =C:\CGPA\e-CGPA Stat\e-CGPA Stat\bin\Debug\Scoredata.mdb;Persist Security Info=False"
conn.ConnectionString = dbProvider & dbSource
conn.Open()
da.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM 100Level1stSemester WHERE MatNO like '%" + cmbMATNO.Text + "%'")
da.SelectCommand.Connection = conn
Dim mycomand As New OleDb.OleDbCommandBuilder(da)
da.Fill(ds, "100Level1stSemester")
cont: If cmbCourseLevel.SelectedItem = "100 Level" Then
' Try
cmdUpdate.CommandText = "UPDATE 100Level1stSemester " & _
"SET MatNo = '" & cmbMATNO.Text & "'" & _
", FName = '" & cmbStatFName.Text & "'" & _
", MName = '" & cmbStatInitial.Text & "'" & _
", SName = '" & cmbStatSname.Text & "'" & _
", STA110 = '" & txtGR1.Text & "'" & _
", MTH110 = '" & txtGR2.Text & "'" & _
", MTH112 = '" & txtGR3.Text & "'" & _
", ACC111 = '" & txtGR4.Text & "'" & _
", GST111 = '" & txtGR5.Text & "'" & _
", GST112 = '" & txtGR6.Text & "'" & _
", GST123 = '" & txtGR7.Text & "'" & _
", [STA110-SCORE] = '" & txtSC1.Text & "'" & _
", [MTH110-SCORE] = '" & txtSC2.Text & "'" & _
", [MTH112-SCORE] = '" & txtSC3.Text & "'" & _
", [ACC111-SCORE] = '" & txtSC4.Text & "'" & _
", [GST111-SCORE] = '" & txtSC5.Text & "'" & _
", [GST112-SCORE] = '" & txtSC6.Text & "'" & _
", [GST123-SCORE] = '" & txtSC7.Text & "'" & _
", [Tot-Grade-Point] = '" & totalgrade & "'" & _
", [Tot-Credit-Load] = '" & totalload & "'" & _
", [1stSemesterGPA] = '" & gpadecimal & "'" & _
", Remarks = '" & remarks & "'" & _
", Flag = '" & failflag & "'" & _
" WHERE MatNo = '" & cmbMATNO.Text & "'"
cmdUpdate.CommandType = Data.CommandType.Text
cmdUpdate.Connection = conn
cmdUpdate.ExecuteNonQuery()
cmdUpdate.Dispose()
conn.Close()
msg1 = "100 Level 1st semester exam score and grades updated successfully."
result = MsgBox(msg1, style, title)
cmdVerifySem1.Enabled = False
Grp1stSEM.Enabled = True
'Catch
MessageBox.Show("An error occured while updating the student's 100 Level scores! Duplicate entry was detected in the database. Ensure that the student's scores has not been entered before and try again.")
'End Try
End If
End If
End If
End Function
有人建议我使用参数化查询,我不知道如何使用
任何帮助都将不胜感激
谢谢当您尝试将数字列设置为非数字值或尝试将两个表合并到具有不同数据类型的列上时,通常会出现数据不匹配错误。您正在更新此处而不是加入,因此请检查您的内置SQL语句,并确保将有效值放入每个列中。鉴于对
标准的引用
请特别注意cmbMATNO.Text的值
,由于您编写命令文本的方式,读取用于更新的命令文本非常困难。这是使用参数化查询的一个很好的理由,但不是最好的理由。以下是使用参数化查询的示例:
Dim cmdText As String = "INSERT INTO Customer(Name, EmailAddress) VALUES (?,?)"
Dim cmd As OleDbCommand = New OleDbCommand(cmdText, con)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("@p1", OleDbType.VarChar).Value = txtUserName.Text
cmd.Parameters.Add("@p2", OleDbType.VarChar).Value = txtEmail.Text
基本上,你用什么?在字符串中,表示将用变量/文本框值替换的值。然后为每个参数向命令中添加一个参数,其顺序与它们在命令字符串中的显示顺序相同。这使得读取命令字符串和验证正确语法更加容易。它还可以防止数据库被注入