2011-07-28 88 views
3

我有一些存儲過程ñ前綴和參數

CREATE PROC MyProc (@FullName NVARCHAR(200) = NULL) 
    AS --............. 

當我把這個proc用作exec MyProc 'Some english text'它的作品好。

但是,如果將其稱爲exec MyProc 'Русский текст'正在使用俄語字母表,則無法正常工作。

而呼叫exec MyProc N'Русский текст'再次運作良好。

我有一個客戶端應用程序和...我需要添加N前綴參數?如果是的話,我該怎麼做?

回答

6

N個只會(手動)需要如果你是串聯在.NET代碼的字符串。 如果您將SQLParameter聲明爲nvarchar,那麼它是自動的:框架將爲您處理它。

所以,你的客戶端代碼是不正確打開你到SQL注入

總之,N個說,字符串文字是unicode。

+1

<<因此,您的客戶端代碼不正確,可能會導致SQL注入問題>>爲什麼? – Alexandre

+0

@Alex Maslakov:搜索SQL注入和參數化:http://www.google.co.uk/search?q=SQL+Injection+and+parametrisation – gbn

+0

如何保護我的程序免受sql注入? – Alexandre

0

你用什麼樣的客戶端應用程序的?

  • 如果它是.Net - 只是指定該參數具有Unicode類型。
  • 如果是OLEDB/ADO - 同樣的事情,PARAM必須標記爲unicode的,合格的wchar_t不是CHAR

更新從MSDN(注意爲nvarchar) 樣品:

yourCommand.Parameters.Add(
    "@FullName", SqlDbType.NVarChar, 80).Value = "toasters"; 

請避免SQL注入;)

+0

.Net。我怎樣才能指定它? – Alexandre

+0

@Alex Maslakov - 剛剛更新了示例 – Dewfy