我正在编写目录程序,我使用这段代码在数据库中查找资源:
sql = "SELECT * FROM Articoli WHERE CodiceArt='"+CodArtEntry.Text+"' OR Barcode='"+BarcodeEntry.Text+"' OR NomeArt LIKE '%"+NameArtEntry.Text+"%'";
此代码有效,但如果NameArtEntry(GTK#Entry)为空,则选择数据库的每条记录。
我该如何避免?非常感谢
答案 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+"%'");
答案 1 :(得分: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 + "%'";
}
答案 2 :(得分: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
时答案 3 :(得分: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 <> ''";