Vb 2015 年查询参数无效

Vb 2015 query with parameters not working

我已经毫无问题地使用了参数化查询,但今天我遇到了无法调试的错误。 这是我的工作查询[=​​16=]

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente =" & strName & " or codiceamministrazione='" & strName & "' or piva='" & strName & "' or codfisc='" & strName & "'"

相同,但有参数,不起作用

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente = @Cliente or codiceamministrazione=@Cliente or piva=@Cliente or codfisc=@Cliente"
cmd.Parameters.AddWithValue("@Cliente", strName)

我在自动完成程序中使用它,该程序根据内部 ID 或商业许可证号(以及其他类似代码)显示客户名称。在数据库上,客户端记录可以编译所有代码字段或仅编译 1.

对于非参数化查询,自动完成建议弹出窗口,对于参数化查询,什么也不显示。也没有错误。

编辑: 使用这个

cmd.Parameters.Add("@Cliente", SqlDbType.VarChar)
cmd.Parameters("@Cliente").Value = strName

现在同一函数中的另一个查询(之前为了简洁而省略)有效,但是,奇怪的是,我在这个问题上所做的查询却没有。

工作:

cmd.CommandText = "select idcliente, ragsociale from Clienti where ragsociale like '%'+@Cliente+'%' or codiceamministrazione=@Cliente"

仍然不工作:

cmd.CommandText = "select idcliente, ragsociale from Clienti where idcliente = @Cliente or piva=@Cliente or codfisc=@Cliente"

在您的原始查询中,当针对 idcliente 进行测试时,您将 strName 视为一个数字(没有引号),但对于所有其他字段,您将其视为一个字符串。所以你暗示它可能包含一个数字或一个字符串。这是有问题的,如果您键入一个数字,并且查询的参数化版本现在在所有情况下都将其视为字符串,那么它将与数据库中 idcliente 的数值不匹配,因此您可能会得到没有结果。

澄清一下:如果您输入的是一个数字,但您的查询认为它是一个字符串(因为参数中的数据类型),它不会与数据库中的任何数字字段匹配。 12345 != "12345"

您需要为这些场景定义单独的参数。您可以将相同的值传递给它们,但在一种情况下将参数的数据类型设置为 varchar,在另一种情况下设置为 int(您可能需要在执行此操作之前检查该值是否可以解析为数字,否则它可能崩溃。在那种情况下,只需将其设置为 null 或 0 或不会进行意外匹配的内容)。