2010-09-26 45 views
0

例如,創建一個SQLServer CE語句命令文本時,該示例具有使用@在SQL語句中做什麼?

command.CommandText = "INSERT INTO Region (RegionID, RegionDescription) VALUES (@id, @desc)"; 

我知道如何運行SQL查詢,但始終只是通過數據庫系統使用SQL語句的字符串。這對我來說是新的,我想明白。 @是否意味着它是一個變量,所以當它解析字符串時,它會將變量id的值插入字符串中,該字符串表示@id? 我知道在PHP中,雙引號允許解析器解析字符串中的變量值,並且想知道這是否相似。
但是,爲了測試它,我做了一個簡單的程序來測試這個理論。

string id = "FOO"; 
MessageBox.Show("@id"); 

它顯示了文字@id,所以這讓我感到困惑。感謝任何幫助! 我只是覺得有必要了解我在打字的內容,而不是盲目追隨這些例子。

+1

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx – 2010-09-26 22:15:29

+0

你改變了你的標題嗎? – Rookian 2010-09-26 22:20:27

+0

@Rookian,這不是一個不同的職位:P – 2010-09-26 22:26:24

回答

3

在這種情況下,@定義了要傳遞到SQL語句中的變量。

例如:

SqlParameter param = new SqlParameter(); 
param.ParameterName = "@id"; 
param.Value   = 666; 

然後你喜歡它添加到您的命令:

command.Parameters.Add(param); 

然後,在你select@id@desc將使用值的SqlParameter的值傳遞。

因此,如果您只是輸出"@id"它將被解釋爲正常字符串。它只有在SQL查詢中使用時纔有意義。

3

在這種情況下,@符號用於參數化SQL命令,而不是用於string中的通用變量替換。

command.CommandText = "INSERT INTO Region (RegionID, RegionDescription) " + 
         "VALUES (@id, @desc)"; 
command.Parameters.AddWithValue("@id", 42); 
command.Parameters.AddWithValue("@desc, "Description of region forty-two."); 
+0

因此,在一個SQL查詢中,它將id變量的值替換爲正確的ID?那是我想確定的。 – 2010-09-26 22:27:13

+0

@Dusty:是的,但它實際上並沒有執行字符串替換。它是SQL特有的,它是類型安全的,因此您不必擔心轉義字符串或將字符串轉換爲SQL友好格式或用引號括起來。這一切都由供應商處理。 – LukeH 2010-09-26 22:33:14

+0

這是SQL Server CE的特定結構,還是標準的查詢語言結構? – 2010-09-26 22:43:04

3

@已在SQL(T-SQL)查詢特殊含義(即:它是用來參數化查詢),但在C#中的字符串,你剛纔得到的字面@。實際上,command.CommandText仍然是@個字符的字符串;只有在需要時才進行替換(即:執行查詢)。


如果你想在C#中的內插,使用String.Format(),如:

string name = "John"; 
string greet = String.Format("Hello, {0}", name); 

// this also works 
Console.WriteLine("Hello, {0}", name); 
+0

與TSQL不同的是,儘管MySQL也支持以&符號爲前綴的變量。 – 2010-09-26 22:24:09

+0

是的,我正在使用string.format創建我用來傳遞給sql server的原始字符串。但是在我之前的問題之後,我切換到了參數化版本。 – 2010-09-26 22:28:35