以下のサブルーチンを参照してください。
Private Sub UpdateGrade(ByVal studentID As Integer, ByVal grade As String)
Dim objCommand As SqlCommand
Dim objCon As SqlConnection
Dim id As Integer
Dim _ConString As String
Try
_ConString = ConfigurationManager.ConnectionStrings("TestConnection").ToString
objCon = New SqlConnection(_ConString)
objCommand = New SqlCommand("DECLARE @StudentID INT " & _
"DECLARE @Grade char(1) " & _
"SET @Grade = '" & grade & "'" & _
"SET @StudentID = '" & studentID & "'" & _
"If @Grade=1 " & _
"begin " & _
"update Student SET Grade = 'A' WHERE StudentID = @StudentID " & _
"end " & _
"Else If @Grade=2 " & _
"begin " & _
"update Student SET Grade = 'B' WHERE StudentID = @StudentID " & _
"end " & _
"If @Grade=3 " & _
"begin " & _
"update Student SET Grade = 'C' WHERE StudentID = @StudentID " & _
"end " & _
"Else If @Grade=4 " & _
"begin " & _
"update Student SET Grade = 'D' WHERE StudentID = @StudentID " & _
"end")
objCommand.Connection = objCon
objCon.Open()
objCommand.ExecuteNonQuery()
Catch ex As Exception
Throw
Finally
End Try
Command.CommandText を TSQL ステートメントに設定すると何か問題がありますか? TSQL は次のようになります (読みやすくするため)。
DECLARE @StudentID INT
DECLARE @Grade char(1)
SET @Grade =
SET @StudentID =
If @Grade=1
begin
update Student SET Grade = 'A' WHERE StudentID = @StudentID
end
Else If @Grade=2
begin
update Student SET Grade = 'B' WHERE StudentID = @StudentID
end
If @Grade=3
begin
update Student SET Grade = 'C' WHERE StudentID = @StudentID
end
Else If @Grade=4
begin
update Student SET Grade = 'D' WHERE StudentID = @StudentID
end
while ループ内に UpdateGrade の呼び出しがあります。while ループは、500 万人の学生をループします。ライブ システムはこのために複雑であることに注意してください。そのため、説明のために上記のコードを提供しました。
過去に .NET コードからストアド プロシージャを呼び出す際に問題が発生しましたが、これは XACT_ABORT で解決されました。