Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从VB.Net应用程序更新/编辑记录到Access数据库时出现问题_Vb.net_Ms Access_Sql Update_Insert Update - Fatal编程技术网

从VB.Net应用程序更新/编辑记录到Access数据库时出现问题

从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

嗨,我在将我的VB.Net应用程序中的更正更新到Access数据库时遇到问题。我得到以下错误:

“update语句中的语法错误”或“条件表达式中的数据不匹配错误”

下面是代码:

公共函数save1stsemester() '此代码将第一学期记录更新到数据库

    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
基本上,你用什么?在字符串中,表示将用变量/文本框值替换的值。然后为每个参数向命令中添加一个参数,其顺序与它们在命令字符串中的显示顺序相同。这使得读取命令字符串和验证正确语法更加容易。它还可以防止数据库被注入