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