1

? を使用する代わりに、Oracle と同じ表記法、つまり :0, :1 を使用して、SQL Server でバインド変数を示すことは可能ですか。

私は検索しましたが、これについて決定的なものは見つかりませんでした。現時点では、私のソリューションはバインド変数を使用して、データベースで実行するステートメントに値を導入します。これは Oracle でうまく機能しますが、SQL Server と PostGIS でも同じことを行う必要があります。たとえば、次のように言う必要はありません。

switch(dialect)
{
    case "Oracle":
    {
        oleDataBaseConnection.AddParameter(":1", coordsys);
        break;
    }

    case "SQLServer":
    { 
        oleDataBaseConnection.AddParameter("?", coordsys);
        break;
    }
}

*AddParameter() は、作成した実行関数を呼び出すときに、コマンド オブジェクトに追加されるリストに値を追加するラッパー クラスの関数です。

上記のようにハードコードされたものを含めずに、コードをできるだけきれいにしたいと思います。すべてに適合するソリューションを希望します。(はい、これはおそらく希望的観測であることはわかっています!)

これを行うために文字列置換を使用できることは知っていますが、それは私が求めているものではありません。私は本当にそのような回避策を使いたくありません。また、プロジェクト マネージャーから、バインド変数を使用して解決策を見つけるように依頼されました。

何か案は?

4

1 に答える 1

1

簡単に言うと、いいえです。バインド変数は、データベースごとに異なる方法で実装されます。したがって、どこかで面倒な互換性ロジックが必要になります。

そうは言っても、私は過去にこの問題を解決するために、文字列置換を使用してバインド パラメータの正しい構文を使用しました。:coordsysしたがって、SQL ステートメントに埋め込んでから、コードに埋め込むことができoleDataBaseConnection.AddParameter("coordsys", coordsys);ます。次に、prepare ステートメントで SQL を検索し、検索し:coordsysて必要なもの (たとえば?) で置き換え、後で実行するために名前でパラメーターのリストを作成します。実行すると、使用するバインド パラメータの適切なリストをオンザフライで作成できます。

舞台裏のビットを実装するのは少し難しいですが、バインド パラメーター (データベースのパフォーマンス、SQL インジェクション攻撃からのセキュリティなど) の利点を備えたクリーンな SQL につながることが個人的にわかりました。

于 2012-02-21T16:37:20.973 に答える