パラメータ化されたSQLクエリが記述されていないアプリケーションに含まれています。INキーワードでパラメータ化するクエリC#
public List<MyClass> GetData(int Id, IEnumerable<string> state)
{
using (var dataContext = new DataContext(_connectionString))
{
var statestring = new StringBuilder("'");
statestring.Append(string.Join("','", state));
statestring.Append("'");
string myStates= statestring.ToString();
string query = "SELECT * FROM table WHERE Id ={0} AND state IN ({1})";
return dataContext.ExecuteQuery<MyClass>(query, new object[] {Id, myStates}).ToList();
}
}
私はこのクエリを実行するには、データを取得していない:以下は、私はこのようなパラメータ化クエリを使用してコードをリファクタリングしていたコードブロック
public List<MyClass> GetData(int Id, IEnumerable<string> state)
{
using (var dataContext = new DataContext(_connectionString))
{
var query = new StringBuilder("SELECT * FROM table");
query.Append(" Id = ");
query.Append(Id);
query.Append(" AND state IN ('");
query.Append(string.Join("','", state));
query.Append("')");
return dataContext.ExecuteQuery<MyClass>(query.ToString()).ToList();
}
です。デバッグで私のクエリがこのように形成されていることがわかりました
SELECT * FROM table WHERE Id ={0} AND state IN ({1}) where in ({1})
私はデータを「エラー」、「警告」と表示しています。私はこの
SELECT * FROM table WHERE Id =34 AND state IN ('error','warning').
のようなクエリを実行するSQL Serverでは は私がmystateの周りに「」削除する必要がありますか?私はまだ二重引用符を見ることができます。私は、「削除トリムの方法を使用して、バック文字列にそれを割り当てるしようとしたが、それはうまくいきませんでした。同じ
のための任意の文字列ビルダを使用せずに、より良い私のクエリをパラメータ化するにはどうすればよいmyStates = myStates.trim('"');
私が言ったとき、私は "エラー"、 "警告"のような結果を得ました。エラー単語の前に一重引用符が付きません – pankaj
私は、一重引用符の先頭と末尾を含めるように答えを修正しました。 –
私はあなたが言ったように..まだ結果が得られません – pankaj