2012-01-04 72 views
1

我正在開發VS 2010中的多語言Web應用程序 - ASP.Net(C#)。如何在SQL Server 2008中使用存儲過程保存Unicode文本

我可以將它沒有任何問題,如果我用一個簡單的插入語句沒有存儲過程例如

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

它正常工作時,我加正爲Unicode數據。我的問題是如何在存儲過程中添加這個'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

存儲過程似乎很好 - 你能告訴我們**你如何從你的C#代碼調用這個存儲過程?此外,作爲一個方面說明:它是存儲* D *程序(在末尾具有** D **) - **在SQL Server中存儲** - 它與「存儲」無關......。 – 2012-01-04 18:09:39

+0

@marc_s:感謝您注意到這些錯別字。存儲過程正常工作,現在我刪除並重新創建了存儲過程,現在它工作得像魅力...問題的一部分被解決了,其他部分是我們需要把SP放在SP中,因爲我們必須把它放在簡單的SELECT,INSERT和UPDATE語句來獲得正確的。 – Learning 2012-01-04 18:40:13

+1

我改寫他的問題:爲了顯示一個字符串文字是unicode,我們把它放在它之前:'N'الحمدللهربالعالمین''現在我們必須顯示一個@variable的語法是unicode? – Hossein 2012-01-04 18:54:56

回答

4

N是Unicode字符串文字的一部分,就像引號一樣。可能你試圖用@parameter名稱添加N,但這不是必需的(甚至是錯誤的)。

使用類似語法

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

所以呼喚你的SP在T-SQL就足夠了。

如果您通過SqlCommand等從.NET調用SP,則不需要額外的代碼,因爲.Net始終使用Unicode字符串。

0

您能否確認表中列的數據類型pg_Pages是否爲NVARCHAR?如果列是VARCHAR,那麼unicode文本將被轉換爲垃圾而不會發出警告。

相關問題