2013-01-10 15 views
0

我工作的一個目錄的程序,我使用這段代碼找到數據庫資源:查詢與空項

sql = "SELECT * FROM Articoli WHERE CodiceArt='"+CodArtEntry.Text+"' OR Barcode='"+BarcodeEntry.Text+"' OR NomeArt LIKE '%"+NameArtEntry.Text+"%'"; 

此代碼的工作,但如果NameArtEntry(GTK#入門)是空的,它選擇數據庫的每個記錄。

我該如何避免這種情況?非常感謝

+1

也許你不應該串聯字符串來產生查詢。改用'SqlCommand',它至少可以防止最常見的SQL注入。看看http://www.dotnetperls.com/sqlparameter – istepaniuk

回答

0

試試這個

var sql = String.Format("SELECT * FROM Articoli WHERE CodiceArt='{0}' OR Barcode='{1}'", CodArtEntry.Text, BarcodeEntry.Text); 
if (!String.IsNullOrWhiteSpace(NameArtEntry.Text)) 
    sql += String.Format(" OR NomeArt LIKE '%{0}%' ", NameArtEntry.Text); 

使用的String.Format會讓你的查詢更具可讀性,尤其是當你寫SQL直接

+0

非常感謝你!此代碼爲我工作,解決了我的問題! :) –

1

檢查明確的空值並忽略它們。

sql = "SELECT * FROM Articoli WHERE CodiceArt is not null AND CodeArt <> '' and (isCodiceArt='"+CodArtEntry.Text+"' OR Barcode='"+BarcodeEntry.Text+"' OR NomeArt LIKE '%"+NameArtEntry.Text+"%'"); 
+0

嗯這行代碼不適合我:/ –

0

請注意,您的SQL語句容易受到SQL-injection的影響。

你總是可以通過逐步建立查詢解決它:

var query = "SELECT * FROM Articoli WHERE CodiceArt='"+CodArtEntry.Text+"' OR barcode='"+BarcodeEntry.Text+"'"; 

if(!String.IsNullOrEmpty(NameArtEntry.Text)){ 
    query += " OR NomeArt LIKE '%"+NameArtEntry.Text + "%'"; 
} 
+0

謝謝你,你的解決方案也可以;) –

0

例如:

sql = "SELECT * FROM Articoli WHERE (CodiceArt='" + CodArtEntry.Text + "' OR Barcode='" + BarcodeEntry.Text + "' OR NomeArt LIKE '%" + NameArtEntry.Text + "%') AND NameArtEntry IS NOT NULL AND NameArtEntry <> ''";