2

クエリ文字列でアポストロフィを保護する方法を見つけようとしています。アポストロフィを含む文字列形式の値があり、挿入しようとするとエラーがスローされます

元 :

Insert into ["excelApp.worksheetsList.ElementAt(0).Name "$"] " + ([col1], [col2]) 
values values" + " ('" + val1 + "', '" + val2 + "');")

これは例です。ここで、val1には「hereIsMy'value」が含まれています。

私を助けてくれてありがとう

4

2 に答える 2

3

パラメータ化されたクエリを使用する必要があり、クエリで一重引用符を使用する必要はありません。

using(OleDbConnection cn = new OleDbConnection(GetConnectionString()))
{
    cn.Open();
    string cmdText = "Insert into [" + excelApp.worksheetsList.ElementAt(0).Name + "$] " +   
                     "([col1], [col2]) values (?, ?)";
    OleDbCommand cmd = new OleDbCommand(cmdText, cn)
    cmd.Parameters.AddWithValue("@p1", val1);
    cmd.Parameters.AddWithValue("@p2", val2);
    cmd.ExecuteNonQuery();
}

この例では、コマンドテキストは、パラメーター値のプレースホルダーを持つ単一の文字列で構成されています。次に、コマンドオブジェクトがその文字列を持つように宣言され、パラメーターのコレクションに2つのパラメーターが追加されます。それらは、値として渡された変数タイプに従って作成されます。したがって、val1とval2が文字列であり、一重引用符(アポストロフィ)が存在する場合、要求された挿入/削除/更新または選択操作用に自動的にフォーマットされます。

于 2013-03-26T14:04:28.837 に答える
1

パラメータ化されたコマンドを使用すれば、そのようなことを心配する必要はありません。アポストロフィやその他の問題について心配する必要はありません。

于 2013-03-26T14:04:13.433 に答える