例如,我有一個表,並且有一個名爲'Tags'的列。我想知道這個專欄是否存在「編程」的價值。我怎樣才能在ADO.NET中做到這一點?如何知道數據庫中是否存在此類值? (ADO.NET)
我這樣做了:
OleDbCommand cmd = new OleDbCommand("SELECT * FROM table1 WHERE Tags='programming'", conn);
OleDbDataReader = cmd.ExecuteReader();
接下來應該做什麼?
例如,我有一個表,並且有一個名爲'Tags'的列。我想知道這個專欄是否存在「編程」的價值。我怎樣才能在ADO.NET中做到這一點?如何知道數據庫中是否存在此類值? (ADO.NET)
我這樣做了:
OleDbCommand cmd = new OleDbCommand("SELECT * FROM table1 WHERE Tags='programming'", conn);
OleDbDataReader = cmd.ExecuteReader();
接下來應該做什麼?
更好的版本,它使用的參數,而不是字符串連接,看到一個很好的做法sql injection
OleDbCommand cmd = new OleDbCommand("SELECT TOP 1 1
FROM table1 WHERE Tags=?", conn);
cmd.Parameters.Add("@p1", OleDbType.VarChar).Value = "Programming";
OleDbDataReader rdr = cmd.ExecuteReader();
if(rdr.Read())
// record exists
else
//Not exists
使用SELECT COUNT(*)並檢查結果。 (和使用的ExecuteScalar)
(假設你知道如何設置連接,並使用它)
SELECT TOP 1 1
FROM table1
WHERE Tags='programming'
你應該做兩件事情:
如果你只是檢查標籤叫編程的情況下,你應該改變ÿ我們的查詢返回COUNT而不是返回所有行。
SELECT TOP 1 Column1 FROM Table1 WHERE Tags = 'Programming'
你應該檢查返回的讀者設置,看看是否有任何行。如果存在,則表示標籤存在。
這個解決方案對你或Dani來說更好,因爲服務器只要遇到一行右邊的標籤就會停止處理。如果coloumn沒有編入索引,這將阻止表掃描。 – 2009-11-09 16:35:31