2011-06-10 44 views
0

我已經演示了以下SQL和VS 2005間SQL:SQL和VS 2005(C#)之間的NULL函數是不同的嗎?

update expbill set convrate=null 
where transID=2 
and companyID=114 

上述T-SQL正在SQL Server上的精細和NULL更新行,但同一交易沒有在VS 2005的工作,使用這個SQL查詢:

string update_exp = " update expbill set convrate = " + null + "" + 
       " where companyID = '" + label1.Text + "'" + 
       " and invno = '" + textBox1.Text + "'"; 
SqlCommand updated_cmd = new SqlCommand(update_exp , con); 
updated_cmd.ExecuteNonQuery(); 

上面的SQL查詢引發錯誤

附近有語法錯誤的關鍵詞 「其中」

我想知道如果相同的SQL語句在SQL中工作,但不在Visual Studio中。 SQL和VS 2005之間的NULL函數有什麼區別?

+1

null轉換爲string.empty – 2011-06-10 11:16:32

+5

您應該**永遠**永遠連接在一起您的SQL語句在C#中 - [你可以拼寫「SQL注入攻擊」??](http://xkcd.com/327/ ) – 2011-06-10 11:47:37

回答

5

爲了記錄在案:

string update_exp = @" 
update expbill set [email protected] 
where [email protected] 
and [email protected]"; 
SqlCommand updated_cmd = new SqlCommand(update_exp , connection); 
updated_cmd.Parameters.AddWithValue("rate", DBNull.Value); 
updated_cmd.Parameters.AddWithValue("cid", label1.Text); 
updated_cmd.Parameters.AddWithValue("iid", textBox1.Text); 
updated_cmd.ExecuteNonQuery(); 

這將保證您的安全。不要將文本連接起來以生成SQL。如果這是您典型的編碼風格,我需要您意識到您的代碼是危險地暴露,並可能被意外或惡意濫用和破壞。疼痛。很多痛苦。

+0

很好的解決方案,但我認爲你是在提供的價值缺少的參數符號和連接不應該保持「零」 – mahesh 2011-06-10 12:53:46

+0

@magesh空是我的調試,對不起 – 2011-06-10 14:37:45

+0

@mahesh你不需要在託管代碼名稱的@。事實上最好不要 – 2011-06-10 14:38:42

3

只要做到這一點。你不必通過c#null。只需使用SQL的。

string update_exp = " update expbill set convrate = null + 
        " where companyID='" + label1.Text + "'"+ 
        " and invno='" + textBox1.Text + "'"; 

兩者均表示「無」。但是,如果你通過C#的null成一個字符串對象,你的建成SQL語句將已閱讀

更新expbill設置CONVRATE = 其中companyid = 'someValue中' 和invno = 'someOthervalue'

因此, 「近 'WHERE' 不正確的語法」

+0

tobias86,很好的答案,但仍然有一些東西缺少「爲什麼?」。 – mahesh 2011-06-10 11:52:35

+0

...好的null是sql和vs-2005中的一個關鍵字,它在sql上的工作原理爲什麼不在c#中? – mahesh 2011-06-10 11:54:12

+0

@mahesh它是一種不同的語言,意味着不同的事情。在C#中,「abc」+ null +「def」是「abcdef」。 – 2011-06-10 12:01:51

4

NULL是SQL

string update_exp = " update expbill set convrate = NULL " + 
關鍵字/符號

C#的空是非常不同的

編輯:

相當於是DBNull.Value,但我從來沒有嘗試來連接它...

+0

DBNull.Value也不適用於它。這兩者完全不同於sql的交易。 – mahesh 2011-06-10 12:34:42

0

更改爲:

string update_exp = " update expbill set convrate = null "+ 
       " where companyID='" + label1.Text + "'"+ 
       " and invno='" + textBox1.Text + "'"; 
0

的問題是SQL解釋一個文本,並且(正如Piotr Auguscik所說)null轉換爲空字符串,你的SQL將在轉換中被破壞,它不是關於null,而是關於SQL文本的創建。

相關問題