私はこの素敵な惑星で私の時間に多くのパラメータ化クエリを作成しましたが、このようなエラーは発生していません... WTFudge?!?!SqlCeパラメータでエラーが発生しました
ERROR:
There was an error parsing the query. [
Token line number = 1,
Token line offset = 20,
Token in error = @table ]
明らかにコンパイラが私のSQL文を好きではありません...しかし、私は何の問題を見ていません?
ここに私のコードです。
using (SqlCeConnection con = new SqlCeConnection(_connection))
{
string sqlString = "SELECT @colID FROM @table WHERE @keyCol = @key";
SqlCeCommand cmd = new SqlCeCommand(sqlString, con);
cmd.Parameters.Add(new SqlCeParameter("@table", tableName));
cmd.Parameters.Add(new SqlCeParameter("@colID", columnIdName));
cmd.Parameters.Add(new SqlCeParameter("@keyCol", keyColumnName));
cmd.Parameters.Add(new SqlCeParameter("@key", key));
try
{
con.Open();
return cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.Write(ex.Message);
throw new System.InvalidOperationException("Invalid Read. Are You Sure The Record Exists", ex);
}
finally
{
if (con.State == ConnectionState.Open)
con.Close();
cmd.Dispose();
GC.Collect();
}
}
非常に単純なSQL文です。私は "@テーブル"が愚かに予約されていたり、何か...されている可能性がありますので、@テーブル名を試したので、@ var、@すべて!問題が何であるか知りません。
デバッグ中に、実際に@ tableパラメータがSqlCeParameterCollectionに存在することが確認されました。一日でクリア!
シンタックスと機能が制限されています。テーブル(またはビュー)名にパラメータを使用することはできません。 –
これはSqlExpressで動作しますか? –
いいえ、率直に言って、私はtablenameのパラメータを受け入れるSQLエンジンを知らない。 C#で動的クエリをいつでも作成できます(文字列を使用)。 –