2012-01-04 12 views
1

VS 2010 - ASP.Net(C#)で開発中の多言語Webアプリケーションを作成しています。SQL Server 2008でストアドプロシージャを使用してUnicodeテキストを保存する方法

私は例

Insert INTO Test (E,A) VALUES('Some English Text',N'الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ') 

のためのストアドプロシージャせずに、単純なINSERT文を使用している場合、私はUnicodeデータのためにNを追加するときには、正常に動作し何の問題もなく、それを挿入することができます。私の質問は、どうすれば問題なしでデータを保存できるように、ストアドプロシージャにこの 'N'を追加することができます。別の方法でNを入れようとしましたが、ストアドプロシージャで構文エラーが発生しました

以下は、私が使用しているストアドプロシージャの例です。

ALTER PROCEDURE [dbo].[usp_AddNewPageDetails] 
    -- Add the parameters for the stored procedure here 
      @PageNameEnglish varchar(100), 
      @PageNameArabic nvarchar(300), 
      @PageTitleEnglish varchar(300), 
      @PageTitleArabic nvarchar(900), 
      @PageDescEnglish varchar(400), 
      @PageDescArabic nvarchar(1200), 
      @PageKeywordsEnglish varchar(120), 
      @PageKeywordsArabic nvarchar(400), 
      @PageBodyEnglish varchar(MAX), 
      @PageBodyArabic nvarchar(MAX), 
      @PageLinkPosition int,  
AS 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
    SET NOCOUNT ON; 

BEGIN 
    INSERT INTO pg_Pages(
    PageNameEnglish,PageNameArabic,PageTitleEnglish,PageTitleArabic,PageDescEnglish, 
    PageDescArabic,PageKeywordsEnglish,PageKeywordsArabic,PageBodyEnglish, 
    PageLinkPosition,PageLayoutPosition,PageBannerImageEnglish,) 
    VALUES 
    (@PageNameEnglish,@PageNameArabic,@PageTitleEnglish,@PageTitleArabic,@PageDescEnglish, 
    @PageDescArabic,@PageKeywordsEnglish,@PageKeywordsArabic,@PageBodyEnglish,) 
END 

返信いただければ幸いです。

+0

保存されたprocはうまくいくようです - 私たちに**表示する** **どのように**あなたのC#コードからこの保存されたprocを呼び出すことができますか?また、サイドノートとして:ストア* D *プロシージャ(最後は** D **) - **ストアド** SQL Server - それは "ストア"とは関係ありません.... –

+0

@marc_s:これらのタイプミスに気付きました。ストアドプロシージャが正常に動作しています。ストアドプロシージャを削除して再作成しました。&charmのように動作しています...問題の一部は解決されています。私たちは単純なSELECT、INSERT UPDATEステートメントを使用して権限を取得します。 – Learning

+1

私は彼の質問に言い換えます:文字列リテラルがユニコードであることを示すには、Nの前にNを入れます: 'N 'الحمدللهربالعالمین''@variableをどのような構文で表示する必要がありますか? – Hossein

答えて

4

Nは、引用符と同様にUnicode文字列リテラルの一部です。おそらくあなたは@パラメータ名でNを追加しようとしましたが、これは必ずしも必要ではありません(間違っていても)。

ので

EXEC usp_AddNewPageDetails 'english text', N'arab text', etc. 

のような構文を使用することは十分であるT-SQLであなたのSPを呼び出します。

SqlCommandなどで.NetからSPを呼び出す場合、.Netは常にUnicode文字列を使用するため、追加のコードは必要ありません。

0

テーブルpg_Pagesの列のデータ型が、適切な場合はNVARCHARであることを確認できますか?列がVARCHARの場合、警告なしにユニコード・テキストがジャンクに変換されます。

関連する問題