2012-10-03 21 views
1
被用于

我正在寻找一种方式,我怎么能显示执行后的查询字符串时,参数在VB.net被用于..如何显示执行后的查询字符串时,参数在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 

,所以我希望不要有参数

+0

我认为你的选择是相当有限的。简单的“一次性”方法是在执行查询之后编写一个方法,该方法使用SQLCommand对象并通过参数集合进行自旋,从而将sql字符串变量中的参数文字替换为实际值。这显然将用于显示和/或记录。你可能会喜欢,甚至使用一个方面来做这个方法,通过Unity或PostSharp进行数据访问。 – codechurn

回答

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,如果你想了解更多的信息。如果你想得到一个真正的调试查询,我的建议是编写代码来实际构建类似上面的代码片段,用您的值代替函数调用。

+0

感谢Joel Coehoorn ...我想我必须手动完成,因为我需要将查询字符串保存在数据库中以用于审计跟踪目的,并且我坚持在查询中使用参数 – Ali

+2

@Sali大多数数据库已经有保存这个选项的选项一种审计。也许你可以看看数据库解决方案,而不是.net。 –

+0

@the_lotus:Tq,你说得对。我会尝试在数据库级别执行此操作 – Ali