0

私は .Net の文字列フォーマットに関するドキュメントを調べてきましたが、まだこのビットを見つけていません。誰かが私を正しい方向に向けてくれることを望んでいました。SqlParameters を受け取り、それらを次のような文字列に入れる作業コードに出くわしました。

        SqlParameter[] arrParams = new SqlParameter[]
        {
            new SqlParameter("@ClientID", clid),
            new SqlParameter("@CustomerID", cuid),
            new SqlParameter("@AdminUser", false)
        };
        string sqlText = string.Format("Insert into [Table1] (RID, CustomerID, AdminUser) values (@ClientID,@CustomerID,@AdminUser)");

..そして、その文字列を SqlCommand の行で実行すると、適切な値が適切な場所に配置されます。私は、記号ではなく、文字列の書式設定引数に中括弧を使用することに慣れている@ので、これについてどこで詳しく学べばいいのか疑問に思っていましたか?

4

3 に答える 3

1

このコードは実際には必要ありませんString.Format

String.Format は、通常「文字列」+変数+「さらに文字列」を実行する場合用です。これは次のように記述されますString.Format("string{0}morestring", variable); 。この場合、それはただ 1 つの文字列であるため、必要がないのはそのためです...何も連結されていません。

これは String.Format の良い説明です

ここで起こっていることは、SQL インジェクションを避けるために @VariableName に SqlParameters が入力されていることです。簡単に言うと、 を作成するSqlParameterと、.NET ライブラリは名前に一致する SQL パラメーター (ストアド プロシージャ、関数など)、または @ で始まり名前に一致する SQL テキスト内の任意の項目を探します。 .

そして、ここに SqlParameters がどのように機能するかについての良い説明があります

于 2012-06-15T15:11:20.537 に答える
0

これは String.Format とは異なります。実際に起こっていることは、SQL コマンドを実行していることです。コマンドは、パラメーターとして SQL Server に渡される @ClientID、@CustomerID、および @AdminUser という変数を探します。少し下に cmd.Parameters = arrparams のようなものがあります。

SQLテキストの周りの実際の String.Format 部分は冗長です。あなたが提案したように中括弧ルートを使用することになります。

お役に立てれば。

于 2012-06-15T15:17:59.703 に答える
0

ここに混乱があると思います。記号は、ステートメントではなく、ステートメント@内の名前付き SQL パラメータを識別するために使用されます。INSERT INTOString.Format

于 2012-06-15T15:12:22.887 に答える