2009-11-09 72 views
1

例如,我有一個表,並且有一個名爲'Tags'的列。我想知道這個專欄是否存在「編程」的價值。我怎樣才能在ADO.NET中做到這一點?如何知道數據庫中是否存在此類值? (ADO.NET)

我這樣做了:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM table1 WHERE Tags='programming'", conn); 
OleDbDataReader = cmd.ExecuteReader();
接下來應該做什麼?

回答

1

更好的版本,它使用的參數,而不是字符串連接,看到一個很好的做法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 
5

使用SELECT COUNT(*)並檢查結果。 (和使用的ExecuteScalar)

(假設你知道如何設置連接,並使用它)

3
SELECT TOP 1 1 
FROM table1 
WHERE Tags='programming' 
+0

這個解決方案對你或Dani來說更好,因爲服務器只要遇到一行右邊的標籤就會停止處理。如果coloumn沒有編入索引,這將阻止表掃描。 – 2009-11-09 16:35:31

1

你應該做兩件事情:

如果你只是檢查標籤叫編程的情況下,你應該改變ÿ我們的查詢返回COUNT而不是返回所有行。

SELECT TOP 1 Column1 FROM Table1 WHERE Tags = 'Programming'

你應該檢查返回的讀者設置,看看是否有任何行。如果存在,則表示標籤存在。