2011-09-02 34 views
1

可能重複:
What's the @ in front of a string for .NET?爲什麼在構建SQL命令時使用地址標記?

那是什麼@在SQL命令做什麼?它的第一次和第二次事件是否會達到同樣的目的?

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(); 
    } 
} 

我聲明一個存儲過程的參數時,我只是熟悉@跡象。

+0

這讓我想哭。 .NET對佔位符有很好的支持。請使用它。您正在尋找的是[逐字字符串](http://msdn.microsoft.com/zh-cn/library/aa691090%28v=vs.71%29.aspx) - 請參閱示例。 – 2011-09-02 19:19:22

+0

這是一個帶引號的字符串,它與sql或paramaters無關。 http://msdn.microsoft.com/en-us/library/362314fe(v=vs.71).aspx – Brook

+4

@pst:如果操作系統詢問它的用途是什麼,它就是因爲他/她不是該代碼的作者,並希望瞭解它在做什麼。 – Yuck

回答

12

這意味着該字符串是一個逐字字符串文字。 \將不會以特殊方式處理。 \n不是新行,它是斜槓和n。對路徑非常有用。

通常要有一個字符串包含C:\Windows\myfile.txt你需要寫"C:\\Windows\\myfile.txt"或與逐字字符串文字@"C:\Windows\myfile.txt"

這是包括在C#規範的2.4.4.5 String literals

逐字字符串由一個@字符後跟一個雙引號字符,零個或多個字符,並且結束的雙 - 引號字符。一個簡單的例子是@「你好」。在逐字字符串文字中,分隔符之間的字符是逐字解釋的,唯一的例外是引號轉義序列。特別是,簡單字符串文字中不處理簡單轉義序列和十六進制和Unicode轉義序列。逐字字符串文字可能跨越多行。

我補充一點,在你引用它來能寫多行腳本,但不關閉每行字符串SQL塊。所以insted的的

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

你可以寫

string str = @"A 
    B 
    C"; 

注意這兩個字符串有很大的不同!第二個包含行結束和對齊空格,但在SQL中這不是問題(在SQL中的許多地方空白空間被忽略)。

您有可能在單行中編寫SQL命令。然後@是完全沒用的,但許多程序員採用「比對不起更好的安全」,並將其灑得相當寬鬆,特別是當他們從其他地方粘貼文本時,可能包含012-:-)

+1

我想感謝引用的神奇仙女,它添加了我鏈接的頁面的標題和文本的引用! :-)在你幫助別人時,知道有好的仙女能幫助你,這總是很好的:-) :-) – xanatos

相關問題