0

私はC#プログラムで使用される次のクエリを持っています:

var names = string.Join(",", activeNames.Select(n => string.Format("'{0}'", n)).ToArray());

var query = @"SELECT * FROM TableA WHERE NOT Name IN (" + names + ")";

上記のクエリは、if name = 'Ken', 'John' のように名前に値がある限り機能します。これは機能します。ただし、名前が空の場合、クエリは次のようになります。

SELECT * FROM TableA WHERE NOT Name IN () 

これは無効な構文です。このクエリを機能させるにはどうすればよいですか?

次のような 2 つの個別のクエリを使用できます: SELECT * FROM TableA //if name is empty

または上記のクエリで、名前に値がある場合。しかし、これはこれにアプローチする正しい方法ですか?

4

4 に答える 4

1

が空にならない場合は、句Nameに空の値を追加できます。IN

@"SELECT * FROM TableA WHERE NOT Name IN (''," + names + ")";
于 2013-01-29T21:29:33.990 に答える
1

確かにそれはうまくいくでしょう。

var query = @"SELECT * FROM TableA"
if(activeNames.length > 0)
  query += " WHERE NOT Name IN (" + names + ")";
于 2013-01-29T21:33:01.867 に答える
0

個別のクエリを使用するだけです。あなたの情報に基づいて、WHERE-clause をハックする必要はありません。

var query = @"SELECT * FROM TableA";
if (activeNames.Any()){
    var names = string.Join(",", activeNames
                                    .Select(n => string.Format("'{0}'", n))
                                    .ToArray());

    query += " WHERE NOT Name IN (" + names + ")";
}

ただし、パラメータ化されたクエリを使用してください。これを行う方法については、この質問を参照してください。

于 2013-01-29T21:36:47.187 に答える
0

names 変数の値の検証を追加するだけです。

string query = string.empty;

if (string.IsNullOrEmpty(names))
{
 query = "SELECT * FROM TableA";
}
else
{
 query = "SELECT * FROM TableA WHERE NOT Name IN ("....
}
于 2013-01-29T21:29:48.717 に答える