2014-04-27 35 views
0

C#中SqlCommand的參數名稱中帶或不帶前導字符(@:)有什麼區別?C#中帶有或不帶有主鍵(@)的命令參數有什麼區別?

command.CommandText = "SELECT * FROM myTable WHERE name = @myName"; 
command.Parameters.Add(new SqlParameter("@myName", "bob")); 

但是,這是OK

command.Parameters.Add(new SqlParameter("myName", "bob")); 

即使這個工程

command.Parameters.Add("myName", "bob"); 

我沒有測試過第二個,但我可以看到他們都在互聯網上。

我已經嘗試過對付Oracle,並且都工作過,有沒有:

那麼哪個更好,還是他們一樣?

回答

3

@是在您未指定時自動添加的。檢查source code這裏:

internal string ParameterNameFixed { 
    get { 
     string parameterName = ParameterName; 
     if ((0 < parameterName.Length) && ('@' != parameterName[0])) { 
      parameterName = "@" + parameterName; 
     } 
     Debug.Assert(parameterName.Length <= TdsEnums.MAX_PARAMETER_NAME_LENGTH, "parameter name too long"); 
     return parameterName; 
    } 
} 

這時候,你的命令生成的SQL查詢字符串使用的屬性。

0

參數之前的@告訴sql解釋器它是一個參數,沒有別的。

如果省略,它可能的工作,因爲有可能是列名和參數名之間的模糊。

你的情況:

SELECT * FROM myTable WHERE name = @myName 

將正確的,即使你有一個名爲myName列工作,但這樣的:

SELECT * FROM myTable WHERE name = myName 

工作,SQL解釋是困惑是否您指的是myName列或參數myName

相關問題