根據您的回覆下方Nudier,你想在選定的messageId通過通過使用消息WHERE MessageID = MessageID
這將不起作用的原因,並且您總是得到返回的第一行的原因是,SQL不知道MessageID是您嘗試傳入的變量。正如SQL知道的,MessageID是一個列名,所有y您要求SQL執行的操作是選擇列MessageID =列MessageID所在行的列「Body」,以便MessageID等於它自己,這總是等於true。由於ExecuteScalar總是返回第一行的第一個單元格,因此您的查詢將始終返回Messages表中的所有行,並且executeScalar將抓取第一個單元格。
希望有道理,如果沒有,只需複製您的查詢並將其與您的SQL數據庫相對應,您應該看看我的意思是返回所有行,因爲where子句總是等於true。
要修復它,您需要考慮Anuraj關於添加參數所說的內容。
要傳遞一個變量在代碼中的SQL字符串,則需要對其進行參數化,然後添加相關的參數,所以你的SQL應該成爲:
SELECT Body FROM Messages WHERE [email protected]
(注意添加@符號的前?參數名稱)
,並直接跌破這一線,則需要使用添加參數代碼:
com.AddParameterWithValue("@MessageId", MessageId);
(我認爲這是正確的,我從Anuraj複製它,I N ormally做略有不同)
再次,看看這個工作,你可以直接針對與參數數據庫使用
DECLARE @messsageID AS INTEGER
SET @messageID = 1
SELECT Body FROM Messages WHERE [email protected]
運行它有這樣一個閱讀更多的細節(或者,如果我的天堂不可能完全清楚)http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06
你說的話有很大的意義,但唯一的問題是當我嘗試使用AddParametersWithValue時,我得到:System.Data.SqlClient.SqlCommand不包含AddParmatersWithValue的定義並且沒有擴展方法AddParametersWithValue接受類型System的第一個參數.Data.SqlClient.SqlCommand可以找到。 – Kevin 2012-08-06 23:28:06
我修改了代碼。 – Anuraj 2012-08-07 01:15:46
非常感謝,謝謝! – Kevin 2012-08-08 01:24:38