0

我正在开发一个目录程序,我使用这段代码在数据库中查找资源:

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

此代码有效,但如果 NameArtEntry (GTK# Entry) 为空,它将选择数据库的每条记录。

我怎样才能避免这种情况?非常感谢

4

4 回答 4

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+"%'");
于 2013-01-10T17:47:21.073 回答
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 + "%'";
}
于 2013-01-10T17:48:37.063 回答
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 时

于 2013-01-10T17:49:37.770 回答
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 <> ''";
于 2013-01-10T17:49:51.917 回答