如果有一种简单的方法可以在参数替换后返回完整的 SQL 语句?即,我想保留该程序运行的所有 SQL 的日志文件。
或者,如果我想这样做,我是否只想摆脱参数,并以老派的方式进行整个查询,在一个大字符串中?
简单示例:我想捕获输出:
从 EnrollmentSubCategory 中选择 subcatId,其中 catid = 1
..从这段代码:
Dim subCatSQL As String = "SELECT subcatId FROM EnrollmentSubCategory WHERE catid = @catId"
Dim connectionString As String = "X"
Dim conn As New SqlConnection(connectionString)
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
Dim cmd As New SqlCommand(subCatSQL, conn)
With cmd
.Parameters.Add(New SqlParameter("@catId", SqlDbType.Int, 1))
End With
Console.WriteLine("Before: " + cmd.CommandText)
cmd.Prepare()
Console.WriteLine("After: " + cmd.CommandText)
我曾假设 Prepare() 会进行替换,但显然不是。
想法?建议?提前致谢。
最佳答案
不,.Prepare
不这样做,实际上命令中的任何内容都没有。参数值永远不会被替换到实际的命令字符串中。它单独发送到数据库,这有几个原因:
除非您使用的是非常旧的数据库(sql server 7?),
.Prepare()
没有必要,实际上并没有为您做任何事情。它曾经很有帮助,因为它会在服务器上编译查询,但现在它会自动为您完成。我没用过.Prepare()
在很长的时间。嗯。望 here看来
.Prepare()
仍然为您做一些事情:如果任何值大于参数定义的长度, .Prepare() 会截断该值,以便在执行时不会收到错误并且查询成功。凉爽的。
关于.net - 如何捕获带有替换参数的 SQL? (.NET,SqlCommand),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867974/