【发布时间】:2016-02-04 07:39:44
【问题描述】:
我有一个查询,其中包含多个具有相同名称的命名参数,我必须为其传递值。考虑以下示例(在非存储过程后面的代码中查询):
Dim stSqlQry As String = "Select fld1, fld2, fld3 From tbl1 Where fld3=@fld3
AND fld1 NOT IN(Select Distinct fld1 From tbl2 Where fld3=@fld3)
AND fld2 NOT IN(Select Distinct fld2 From tbl3 Where fld3=@fld3)"
我使用以下 sn-p 将值传递给 fld3:
cmd = New SqlCommand(stSqlQry)
cmd.Parameters.AddWithValue("@fld3", fld3_val)
运行时它会为@fld3 提供标量变量错误(并且在调试中 fld3_val 有一个值)。因此,作为一种解决方法,我使用它如下声明三个命名参数fld3_1, fld3_2, fld3_3:
Dim stSqlQry As String = "Select fld1, fld2, fld3 From tbl1 Where fld3=@fld3_1
AND fld1 NOT IN(Select Distinct fld1 From tbl2 Where fld3=@fld3_2)
AND fld2 NOT IN(Select Distinct fld2 From tbl3 Where fld3=@fld3_3)"
并使用以下 sn-p 将相同的值传递给 fld3_1, fld3_2, fld3_3:
cmd = New SqlCommand(stSqlQry)
cmd.Parameters.AddWithValue("@fld3_1", fld3_val)
cmd.Parameters.AddWithValue("@fld3_2", fld3_val)
cmd.Parameters.AddWithValue("@fld3_3", fld3_val)
第二个完美,第一个格式在后面的代码中不正确吗?有没有什么方法可以使用单个SqlCommand Parameter 将值传递给多个 SQL 参数?
【问题讨论】:
-
不确定为什么第一个失败并显示该错误消息。您能否尝试更改删除 AddWithValue 的第一个调用并使用 Add(param, type).Value = value 语法?
-
好的,我也会试试那个格式,然后告诉你结果。
-
我猜您正在使用内联 sql 而不是存储过程。使用存储过程多次使用相同的参数是没有问题的,但是使用内联 sql 每个
@符号基本上就像声明一个新变量一样,因此会出现错误。使用您拥有的解决方法或编写存储过程。我建议使用存储过程。 -
@ZoharPeled 所有代码都在代码后面,没有存储过程。我还没有尝试过史蒂夫的建议。更新了我的问题以避免混淆。
-
@haraman 在这种情况下我认为史蒂夫的建议不会有帮助。 AddWithValud 被认为是不好的做法,因为它强制 ado.net 从值推断参数类型,这可能会导致一些问题,但这不是其中之一。我确实建议更改为存储过程。
标签: c# asp.net sql-server vb.net parameters