检索的SqlCommand / OleDbCommand的查询参数插入后?
-
18-09-2019 - |
题
有什么办法来访问准备语句发送到SQL服务器?
Dim params(1) As OleDb.OleDbParameter
params(0) = New OleDb.OleDbParameter("@ID", OleDb.OleDbType.VarChar, 50)
params(0).Value = guiItemsGridView.Rows(e.RowIndex).Cells("ID").Value
params(1) = New OleDb.OleDbParameter("@SavedValue", OleDb.OleDbType.VarChar, 50)
params(1).Value = guiItemsGridView.Rows(e.RowIndex).Cells("Saved Value").Value
Dim QueryString As String = "UPDATE Items SET [Saved Value]=@SavedValue WHERE ID=@ID"
myDatabase.objAdapter.UpdateCommand = New OleDb.OleDbCommand(QueryString, DatabaseConnection)
myDatabase.objAdapter.UpdateCommand.Parameters.AddRange(params)
myDatabase.objAdapter.UpdateCommand.Prepare()
Debug.Print(myDatabase.objAdapter.UpdateCommand.CommandText)
我在寻找一种方法的参数已被添加后访问准备好的查询。制备该命令后,CommandText中仍含有即使参数已经通过了基本查询UPDATE Items SET [Saved Value]=@SavedValue WHERE ID=@ID
。
我会发现它有用写入日志通过这个组块的代码用于调试在本申请的其它区域预先形成的查询。
解决方案
我从来没有发现一种方法来记录使用所述参数的功能的查询。我最终恢复到在一个字符串创建查询,然后消耗所述串:
QueryString = String.Format("UPDATE Items SET [Saved Value]={0} WHERE ID={1}", SavedValue, ID)
我然后消耗的字符串两者的查询和记录功能。
其他提示
我需要类似的东西。我已经建立了可以做的伎俩的方法,它并不完美,但它确实有助于:
<强> VB .NET:强>
Public Sub LogSQL(ByVal cmd As OleDb.OleDbCommand)
Dim pars As String = ""
If cmd.Parameters.Count > 0 Then
pars = " ["
Dim a As Integer
For a = 0 To cmd.Parameters.Count - 1
pars = pars + cmd.Parameters(a).Value.ToString + ","
Next
pars = Left(pars, Len(pars) - 1) + "]"
End If
Log("SQL=" + cmd.CommandText + pars, LogNivel.INFO)
End Sub
这给出这样的:
SQL=SELECT f1,f2 FROM table WHERE fx = ? AND fy = ? [20,35]
我试图寻找了一段时间,但没有找到使用该库来获得一个SQL语句返回了插入的参数。最好我能想出是SQL Server事件探查SQL Server中。如果你打开它,并在存储过程菜单下检查TSQL菜单和SQL:StmtCompleted
下的选项SP:StmtCompleted
你会看到事件的TextData这样的列:
<强> SQL:StmtCompleted事件 强>
EXEC @return_value = [dbo].[ap_test]
@User_ID = N'testuser'
<强> SP:已完成 强>
SELECT *
FROM Table1
WHERE User_ID = @User_ID
既然你正在寻找一种方式来记录您的查询和它们各自的输入参数,这可能是useful-但是,它肯定会更好,如果UpdateCommand.CommandText
捕获插入的参数。我会继续看到,如果有一个解决方案在那里,因为我一直想这个功能好几次自己。