1

重複の可能性:
.NET の文字列の前にある @ は何ですか?

@この SQL コマンドで何をしているのですか? 1 回目と 2 回目の出現は同じ目的を果たしますか?

static DataTable StaffsGetProjectIDHRCoordinators(SqlConnection conn, string targetDatabase)
{
    try
    {
        SqlCommand cmd = new SqlCommand(@"
            SELECT DISTINCT Staff.*
            FROM Staff
            INNER JOIN " + targetDatabase.Replace("'", "''") + @".dbo.ProjectHRCoordinator ProjectHRCoordinator
            ON Staff.StaffID = ProjectHRCoordinator.HRCoordinatorStaffID
            ORDER BY Staff.FName, Staff.LName", conn);

            return ExecuteDataTable(cmd);
    }
    finally
    {
        if (conn.State != ConnectionState.Closed) conn.Close();
    }
}

私は@、ストアド プロシージャのパラメーターを宣言するときの記号に精通しています。

4

1 に答える 1

12

これは、文字列がそのままの文字列リテラルであることを意味します。\を特別扱いすることはありません。\nは改行ではなく、スラッシュと n です。パスに非常に便利です。

通常、文字列を含むには、逐語的な文字列リテラルで ORC:\Windows\myfile.txtを記述する必要があります。"C:\\Windows\\myfile.txt"@"C:\Windows\myfile.txt"

これは、C# 仕様の2.4.4.5 文字列リテラルでカバーされています。

逐語的な文字列リテラルは、@ 文字とそれに続く二重引用符、0 個以上の文字、および終了二重引用符文字で構成されます。簡単な例は @"hello" です。逐語的な文字列リテラルでは、デリミタ間の文字は逐語的に解釈されますが、唯一の例外は引用符エスケープ シーケンスです。特に、単純なエスケープ シーケンス、および 16 進数と Unicode のエスケープ シーケンスは、逐語的な文字列リテラルでは処理されません。逐語的な文字列リテラルは、複数の行にまたがることがあります。

引用したSQLのブロックでは、文字列のすべての行を閉じることなく、スクリプトを複数行で記述できるようにするために使用されていることを追加します。とても気に入った

string str = "A " + 
    "B " + 
    "C";

あなたは書ける

string str = @"A
    B
    C";

2 つの文字列が大きく異なることに注意してください。2 番目のものには行末とアラインメント スペースが含まれていますが、SQL ではこれは問題ではありません (SQL では多くの場所で空白は無視されます)。

SQL コマンドを 1 行で記述した可能性があります。その後、それ@はまったく役に立ちませんでしたが、多くのプログラマーは「ごめんなさいよりも安全」を採用し、特に他の場所からのテキストを貼り付けるときに、かなり自由に振りかけます\ escapes:-)

于 2011-09-02T19:18:12.620 に答える