古いVB Webサイトを継承し、ExecuteNonQueryを使用してパスワードを変更しました。私たちの運用環境では、SQL Server 2008 R2では、機能が壊れているという最近の報告がありました。実際にデータが更新されているとき(単一の行)、ExecuteNonQueryは-1を返していることが分かります。データを私たちの開発環境にコピーすると、影響を受ける行は期待どおり1になります。別のサービスパック(4XXXと6XXX)が適用されていますが、これが問題なのでしょうか? RowCountを検査するためにExecuteScalarを使用するようにコードを修正しました。これは動作しています。しかし、そうする必要はありません。どんな洞察?私は今、これがどれくらい長く壊れているのか考えました。ExecuteNonQueryは-1を返します(間違って)
ここには-1が誤って返される元のコードがあります。ストアドプロシージャが呼び出されておらず、トリガもありません。予想通り
Dim cmd As SqlCommand = New SqlCommand("UPDATE UserMaster " & _
" SET Password = @Password, LastPasswordChangedDate = @LastPasswordChangedDate " & _
" WHERE Username = @UserName AND ApplicationName = @ApplicationName ", conn)
cmd.Parameters.Add("@Password", SqlDbType.VarChar, 255).Value = CreateHash(newPwd)
cmd.Parameters.Add("@LastPasswordChangedDate", SqlDbType.DateTime).Value = DateTime.Now
cmd.Parameters.Add("@Username", SqlDbType.VarChar, 255).Value = username.TrimEnd
cmd.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 255).Value = Left(pApplicationName, 1)
Dim rowsAffected As Integer = 0
Try
conn.Open()
rowsAffected = cmd.ExecuteNonQuery()
このコードは1を返し:
Dim cmd As SqlCommand = New SqlCommand("UPDATE UserMaster " & _
" SET Password = @Password, LastPasswordChangedDate = @LastPasswordChangedDate " & _
" WHERE Username = @UserName AND ApplicationName = @ApplicationName ; select @@rowcount", conn)
cmd.Parameters.Add("@Password", SqlDbType.VarChar, 255).Value = CreateHash(newPwd)
cmd.Parameters.Add("@LastPasswordChangedDate", SqlDbType.DateTime).Value = DateTime.Now
cmd.Parameters.Add("@Username", SqlDbType.VarChar, 255).Value = username.TrimEnd
cmd.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 255).Value = Left(pApplicationName, 1)
Dim rowsAffected As Integer = 0
Try
conn.Open()
rowsAffected = CType(cmd.ExecuteScalar(), Integer)
'SET NOCOUNT OFF;'は更新前に追加します。それにより、余計な結果セットがselect文を妨害するのを防ぐことができます...私はこのアプローチをお勧めしません。あなたはそれを残すべきです...単純な更新をして問題にならないようにしてください。パラメタを出力し、更新後に設定します。あなたが実行されたときには、行数を取得します...または、あなたのような行数を選択します。 – Codexer
そのテーブルにトリガーがありますか?はいの場合、これは助けになる可能性があります(http://stackoverflow.com/a/15702169/1050927) – Prisoner
@Alex OPはトリガーがないと言っています...最後の文章です。 – Codexer