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インジェクションに対して脆弱であることに注意してください。

次の手順でクエリを作成することで、いつでも解決できます。

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 に答える