2

わかりました、これを疑問に思ったのは私だけではないと確信しています=)

一言で言えば、VisualStudioを使用して変換することは可能ですか?

string a1, string a2, string a3, string a4, string a5, string  a6

次のような文字列に変換します。

"'value1', 'value2', 'value3', 'value4', 'value5', value6'"

(正確なフォーマットについて心配する必要はありません。自分で処理できます)?

背景:多くのパラメータを受け入れるストアドプロシージャを呼び出す関数がよくあり、場合によっては(デバッグ)「execdbo.storedprocname param1、param2 ....」文字列を作成して、サーバーに対して直接実行する必要があります。現在、文字列を手動で作成する必要があり、VisualStudioの即時ウィンドウで文字列を印刷する簡単な方法があることを望んでいます。

編集(一般的な需要による):私はLinq2SQLを使用しており(はい、廃止されていることを知っています)、100以上のSPが含まれています。関数をデバッグする必要があるときは、これらの関数の1つにブレークを入れて、データベースに渡される内容を確認します。したがって、これはRUNTIMEになります。ブレークポイントに到達したとき:

public static void MethodCreatedByLINQ2Sql(string param1, string param2, string param3, ...)
{
    context.mystoredprocedure(param1, param2, param3...); //<---breakpoint
}

どういうわけか(各パラメータを指定せずに)、SSMS2008にカットアンドペーストできる(時間を節約しようとして)区切られた文字列を印刷して、このような文字列を作成したい

exec dbo.mystoredprocedure [['value1', 'value2', 'value3'......]] <--- pasted value from VisualStudio

いいえ、SQLInjectionsなどを実行しようとはしていません。私は時間を節約しようとしています-これらのSPのいくつかには20以上のパラメータがあります。

4

6 に答える 6

3

これはあなたが求めているものですか?

String paramStr = String.Format("'{0}', '{1}', '{2}', '{3}', '{4}'", a1, a2, a3,a4,a5);

このような文字列をDBに送信すると、 SQLインジェクションが発生する可能性があることを指摘しておく必要があります

オプション2:

を中間ウィンドウに印刷するには、次のトリックを使用できます。

  1. ブレークポイントを作成する
  2. 赤い点を右クリック->「ヒットしたとき」。
  3. 新しい画面で、[メッセージを印刷する]チェックボックスをオンにします
  4. テキストボックスに上からString.Formatと入力しますが、両側に中括弧を付けます。

{ String.Format(.....) }

そのメッセージに出力できるパラメーターの詳細:http://msdn.microsoft.com/en-us/library/232dxah7.aspx

于 2012-09-12T14:14:33.103 に答える
2

私はparamsそれをより単純にするためにあなたの方法で使用するのが最良の方法だと思います:

public static void MethodCreatedByLINQ2Sql(params string[] list)
{
    //And then very simply use String.Join()
    string s = String.Join(",", list);
}
于 2012-09-12T14:42:43.677 に答える
0

デバッグ中に、VisualStudioの即時ウィンドウでコードを実行できます。

于 2012-09-12T14:14:57.213 に答える
0

String.Join()次のように、任意の数の文字列を連結できます。

string completeString = String.Join(", ", a1, a2, a3, ... ,aN);

この過負荷(5つの異なるものがあります)は.Join(string separator, params object[] values)

もちろん、すでに指摘したように、特にを使用する必要がある場合は、これを避ける必要がありますEXEC。パラメータ化されたクエリを強くお勧めします(ただし、完全に別のトピックに加えて、SO自体に関する多くの例を簡単に見つけることができます)。

于 2012-09-12T14:18:12.720 に答える
0

文字列配列にa1、a2があります:

var a = new string[] { a1, a2, a3... };

次に、これらの値を次のように文字列に変換します。

var v = string.Join("','", a);

とにかく、ストアドプロシージャに対してParameterを使用することをお勧めします。上記のトリックは、SQLインジェクションにつながる可能性があるため、SQLクエリを生成するのはクリーンではありません。

于 2012-09-12T14:18:51.557 に答える
0

SQLプロファイラーを実行すると、必要なすべての情報を含むEXECステートメントが表示されます。プロファイラーのどのオプションが最適かを試す必要がありますが、通常、TSQL_SPsテンプレートを使用する場合は、探している情報が得られるはずです。

もちろん、これに対する制限は、ストアドプロシージャの呼び出しが行われるまで文字列を取得しないことです。そのため、コードにブレークポイントを設定する場合は、SQLServerの呼び出しの後である必要があります。

于 2012-09-12T14:21:55.447 に答える