2011-07-28 9 views
3

は、私はいくつかのストアドプロシージャNプレフィックスとパラメータ

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

を持っています。

しかし、ロシア語のアルファベットを使用しているexec MyProc 'Русский текст'と呼ぶと、正しく動作しません。

また、exec MyProc N'Русский текст'の呼び出しがうまくいきます。

私はクライアントアプリケーションを持っています...パラメータにNプレフィックスを追加する必要がありますか?はいの場合はどうすればいいですか?

答えて

6

Nのみ)、手動で(必要とされるであろう。 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の代わりに

更新 MSDN(NVARCHARに注意を払う)から サンプル文字の合格する必要があります。

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

そして、SQLインジェクションを避けてください、あなたは.NETコード内の文字列を連結している場合)

+0

.Net。どのように指定できますか? – Alexandre

+0

@Alex Maslakov - サンプル – Dewfy

関連する問題