【发布时间】:2013-08-07 19:40:15
【问题描述】:
请看下面的子程序:
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 解决了这个问题。
【问题讨论】:
-
你为什么不使用存储过程......
-
@logixologist 没有必要,甚至 IMO 也不建议调用存储过程;请不要让它听起来像“每个人都使用存储过程”,因为:他们真的没有
-
@logixologist,只是为了保持一致性。该应用目前不使用存储过程。
-
@Marc Gravell,谢谢。你明白我的问题吗?读了几次后,我在徘徊,如果其他人能理解我的意思。
-
@w0051977,如果出现错误,抱歉。您拥有的优势是您可以将一些参数传递给它,并在您的 vb.net 代码之外的单独文件中执行所有逻辑。您需要做的就是将命令文本设置为存储过程。至于应用程序目前不使用它们,我已经多次处于应用程序不使用的位置,并且我仍然将所有新代码移动到存储过程中,以便您可以将 SQL 与 .NET 分开。 marc - 我从来没有说过每个人都使用它们,我只是建议它在这里会很好用。
标签: .net sql-server vb.net tsql