0

在下面的代码中,命令执行但没有更新。主要问题是SQL Server 数据库中将 IDNumber设置为IsIdentity的主要问题。如果有人可以帮助我,我将不胜感激。

If rbnCore.Checked = True Then
                    subject = "Core"
                Else : subject = "Elective"
                End If
 qry = "Update ProgramDetails.Subjects set SubjectCode=@SubjectCode,SubjectName=@SubjectName,SubjectType=@SubjectType,UserID=@UserID,Password=@Password where IDNumber='" & txtIDNumber.Text & "'"
                cmd = New SqlCommand(qry, cn)
                cmd.Parameters.Add(New SqlParameter("@SubjectCode", txtSubjectCode.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectName", txtSubName.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectType", subject))
                cmd.Parameters.Add(New SqlParameter("@UserID", txtUserName.Text))
                cmd.Parameters.Add(New SqlParameter("@Password", txtPassword.Text))
                cmd.ExecuteNonQuery()
                MessageBox.Show("Record successfully updated", "Updated", MessageBoxButtons.OK, MessageBoxIcon.Information)
                showgrid()
            End If
4

2 回答 2

2

首先,您绝对希望将 IDNumber 作为参数传入,以帮助防止 SQL 注入攻击(只需添加一个新参数并将代码更改为 IDNumber=@IDNumber 的位置)

您可以通过检查 cmd.ExecuteNonQuery() 的结果轻松查看是否发生了更新 - 它返回受影响的行数,如果什么也没发生,显然为零。

If rbnCore.Checked = True Then
                    subject = "Core"
                Else : subject = "Elective"
                End If
 qry = "Update ProgramDetails.Subjects set SubjectCode=@SubjectCode,SubjectName=@SubjectName,SubjectType=@SubjectType,UserID=@UserID,Password=@Password where IDNumber=@IDNumber"
                cmd = New SqlCommand(qry, cn)
                cmd.Parameters.Add(New SqlParameter("@IDNumber", txtIDNumber.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectCode", txtSubjectCode.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectName", txtSubName.Text))
                cmd.Parameters.Add(New SqlParameter("@SubjectType", subject))
                cmd.Parameters.Add(New SqlParameter("@UserID", txtUserName.Text))
                cmd.Parameters.Add(New SqlParameter("@Password", txtPassword.Text))
                If cmd.ExecuteNonQuery() > 0 Then
                  MessageBox.Show("Record successfully updated", "Updated", MessageBoxButtons.OK, MessageBoxIcon.Information)
                  showgrid()
                Else
                  'nothing affected...
                End If
            End If
于 2013-02-08T10:55:20.790 回答
0

这是.Net 环境吗?为什么你的字符串使用'&'而不是'+'进行连接。检查那个。因此,将您的查询重写为: qry = "Update ProgramDetails.Subjects set SubjectCode=@SubjectCode,SubjectName=@SubjectName,SubjectType=@SubjectType,UserID=@UserID,Pass word=@Password where IDNumber='" + txtIDNumber.Text + "'"

于 2013-02-08T11:54:25.337 回答