2012-10-13 38 views
0

我有一個問題,我已經簡化如下。 我有一個sql語句由參數即Prepared語句填充。是否有可能獲得最終事先準備好的聲明,並將其存儲在一個變量準備Sql語句並存儲在變量

這裏就是我試圖做的,但它不工作

Dim cmd As New MySqlCommand("UPDATE `users` SET `email` = ?email", con) 
cmd.Prepare() 
cmd.Parameters.AddWithValue("?name", "newEmail") 

現在,這裏我試着這樣做

Dim finalQuary As String = cmd.CommandText.ToString 

我這樣做,希望能在變量得到這個:

"UPDATE `users` SET `email` = theEmailAddress" 

而是我得到原始措手不及,即

UPDATE `users` SET `email` = ?email 

我希望你能理解我的問題。如果我不清楚,請告訴我

+0

您必須在調用Prepare()方法之前必須指定要準備的語句中每個參數的名稱,數據類型,長度(大小)。 *如果不符合這些條件,Prepare會返回一個錯誤。* – adatapost

+0

與論壇網站不同,我們不使用「謝謝」或「任何幫助讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts) –

回答

1

替換在執行時做的MySQL端。你基本上試圖獲得一個函數的代碼,所有的參數都由提供的值替換。除非VB.NET正在模擬準備好的語句(我猜測它不是),或者MySQL有一個API來返回一個插入字符串(據我所知,它沒有),你不能得到一個插入字符串版本的查詢。

0

使用@代替?

Dim cmd As New MySqlCommand("UPDATE `users` SET `email` = @email", con) 
cmd.Parameters.AddWithValue("@email", "newEmail") 
+0

同樣的問題,我得到原始查詢 – Krimson

+0

你可以刪除'cmd.Prepare()'並再次嘗試。 –