使用参数在语句中显示完整查询

时间:2015-05-11 05:09:50

标签: vb.net sql-parametrized-query

我在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

2 个答案:

答案 0 :(得分:1)

参数不会连接到命令中,它们会单独发送到数据库。否则,使用参数化查询和使用连接查询之间没有区别。 (see the answer to a similar question here.)
这意味着,如果您的sql被vb.net代码连接起来,为了调试您的查询,您将不得不更努力地工作。

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

答案 1 :(得分:0)

将此代码放在下面,您已经添加了参数,并且您将在debugSQL中有将要执行的SQL语句

Dim debugSQL As String = cmd.CommandText

For Each param As SqlParameter In cmd.Parameters
    debugSQL = debugSQL.Replace(debugSQL.ParameterName, debugSQL.Value.ToString())
Next