在 VB.NET 中,我调用带有 1 个参数的存储过程并使用
CommandType.StoredProcedure
。
在存储过程中,我根据我正在测试的某些标准生成
RAISEERROR
。
当我按照这种安排在 VB 中执行 SQL 时,它不会捕获错误或至少会生成一个消息框
当我改为使用
CommandType.Text
并使用
EXEC StoredProcNameHere 'parametervaluehere'
它确实显示了这个消息框,其中包含我期待的错误。
我是否有什么设置不正确的地方?
这就是我想要的工作(替换专有值):
Using con As New SqlClient.SqlConnection("Connection String Here")
Using cmd As New SqlClient.SqlCommand
With cmd
.Connection = con
.CommandType = CommandType.StoredProcedure
.CommandText = "StoredProcHere"
.Parameters.Add("@Param", SqlDbType.Char).Value = oFunctions.Enquote(paramvalue)
End With
con.Open()
Try
cmd.ExecuteNonQuery()
Catch ex As SqlClient.SqlException
MsgBox(ex.Message, vbExclamation, "Title")
End Try
con.Close()
End Using
End Using
这就是有效的:
Using con As New SqlClient.SqlConnection("Connection String Here")
Using cmd As New SqlClient.SqlCommand
With cmd
.Connection = con
.CommandType = CommandType.Text
.CommandText = "EXEC StoredProcedure " & oFunctions.Enquote(param)
End With
con.Open()
Try
cmd.ExecuteNonQuery()
Catch ex As SqlClient.SqlException
MsgBox(ex.Message, vbExclamation, "Title")
End Try
con.Close()
End Using
End Using
oFunctions.Enquote
只是将参数用单引号括起来 ('
)。
问题在于引用参数值,正如 @ThomA 指出的那样,
谢谢你汤姆!