-1

2 つの where 句を使用してアクセス データベースから値を取得しようとしました。これは私が得たエラーです! "Syntax error (missing operator) in query expression 'unit1<=34 and unit2>=34 where"'.

これは私のコードです:

OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\Work\\Office\\Electricity_Board_bill_calculator\\gk.accdb;");
con.Open(); 
OleDbCommand com5 = new OleDbCommand("select id from tblBillConfig where  unit1<=" 
          + contot + " and unit2>=" + contot + " where group=3 ", con);
4

2 に答える 2

2

SQL 文字列の 2 か所に「where」があります。これがエラーの少なくとも 1 つの理由です。

于 2013-11-03T06:54:43.343 に答える
2

潜在的な問題がいくつかあります。

  • where2 つの節を持つことはできません。2 番目のフィルターは and` で導入する必要があります
  • Groupは予約済みのキーワードなので、エスケープする必要があります。(これは[group]Sql Serverにあります。MS Accessでこれを行う方法がわかりません)

パラメータを使用して変数をバインドすることも検討する必要があります。これにより、SQL インジェクションなどの一連の問題に対処し、パラメータ化によって RDBMS がクエリ プランをキャッシュできるため、パフォーマンスも向上します。

したがって、クエリは次のようになります。

var com5 = new OleDbCommand("select id from tblBillConfig " +
                            " where unit1<=? and unit2>= ? and [group]=3 ", con);
command.Parameters.Add("@p1", OleDbType.Integer).Value = 34;
command.Parameters.Add("@p2", OleDbType.Integer).Value = 34;
于 2013-11-03T06:55:06.777 に答える