0

我在 vb.net 中调试查询时遇到了一些麻烦。我只想获得其中包含价值的完整查询。我使用参数在查询中添加值。这是我的代码:

'Select query
Dim stm As String = "SELECT *, FORMAT(NOW(),'DD-MM-YYYY HH:NN:SS') as waktu FROM [user] WHERE [username]=? AND [password]=? AND active=TRUE"
Dim cmd As OleDbCommand = New OleDbCommand(stm, db)

'Parameters
Using md5Hash As MD5 = MD5.Create()
    Dim pwd As String = GetMd5Hash(md5Hash, Me.tx_password.Text)
    cmd.Parameters.Add("p1", OleDbType.VarChar, 25).Value = Me.tx_username.Text
    cmd.Parameters.Add("p2", OleDbType.VarChar, 32).Value = pwd
End Using

'Execute Query
MsgBox(stm)
Dim reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.SingleRow)

使用此代码,我得到的结果如下:

SELECT *, FORMAT(NOW(),'DD-MM-YYYY HH:NN:SS') as waktu FROM [user]
WHERE [username]=? AND [password]=? AND active=TRUE

如何得到这样的结果:

SELECT *, FORMAT(NOW(),'DD-MM-YYYY HH:NN:SS') as waktu FROM [user]
WHERE [username]='adminUser' AND [password]='adminPassword' AND active=TRUE
4

2 回答 2

1

参数不连接到命令中,它们单独发送到数据库。否则,使用参数化查询和使用连接查询之间没有区别。(请参阅此处类似问题的答案。)
这意味着,如果您的 sql 是由 vb.net 代码连接的,那么为了调试您的查询,您将不得不更加努力地工作。

如果您的数据库支持存储过程,我建议您开始使用它们而不是参数化查询。您可能会获得性能,并且会更容易调试。
如果没有,您可以将查询原样复制到 sql 编辑器,并使用调试器选项之一获取参数的值并将它们一一复制到 sql 编辑器。

于 2015-05-11T05:33:31.353 回答
0

将此代码放在您已添加参数的下方,您将在debugSQLSQL 语句中执行该语句

Dim debugSQL As String = cmd.CommandText

For Each param As SqlParameter In cmd.Parameters
    debugSQL = debugSQL.Replace(debugSQL.ParameterName, debugSQL.Value.ToString())
Next
于 2015-05-11T10:47:38.213 回答