1

我正在寻找一种在 VB.net 中使用参数时如何在执行后显示查询字符串的方法。

例如 :

Using con As New SqlConnection(strConnect)
con.Open()
Using com As New SqlCommand("INSERT INTO myTable (myColumn1, myColumn2) VALUES (@C1, @C2)", con)
    com.Parameters.AddWithValue("@C1", myValueForColumn1)
    com.Parameters.AddWithValue("@C2", myValueForColumn2)
    com.ExecuteNonQuery()
End Using
End Using

所以我希望用实际值而不是参数显示查询字符串

4

1 回答 1

2

您要查找的查询字符串不存在。它永远不会在任何时候创建。参数化查询的全部目的是,参数中的数据永远不会被替换到命令文本中,因此数据输入';DROP TABLE myTable;-- 永远不会有机会被视为代码。

请记住:参数化查询不会清理输入:它们会隔离输入。

如果您想了解发生了什么,请更多地考虑一下,就好像您正在运行这样的 sql 过程:

DECLARE @C1 nvarchar(50);
DECLARE @C2 nvarchar(50);

Set @C1 = imaginaryFunctionToGetValueFromDataSegmentOfConnection(1);
Set @C2 = imaginaryFunctionToGetValueFromDataSegmentOfConnection(2);

INSERT INTO myTable (myColumn1, myColumn2) VALUES (@C1, @C2);

如果您想了解更多信息,所涉及的实际机制是sp_executesql 。如果你想获得一个真正的调试查询,我的建议是编写代码来实际构建类似上面的代码片段,用你的值代替函数调用。

于 2012-10-03T03:06:03.030 回答