0

次のコードでは、コマンドは実行されますが、更新は行われません。主な問題は、 SQLServerデータベースで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

まず、SQL インジェクション攻撃から保護するために、IDNumber もパラメーターとして渡す必要があります (新しいパラメーターを追加し、コードを 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 に答える