Как сохранить текст Unicode с помощью хранимой процедуры в SQL Server 2008 - PullRequest
1 голос
/ 04 января 2012

Я работаю над многоязычным веб-приложением, разрабатываемым в VS 2010 - ASP.Net (C #).

Я могу вставить его без каких-либо проблем, если я использую простой оператор вставки без хранимой процедуры, например

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

Работает нормально, когда я добавляю 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

Ответ приветствуется.

Ответы [ 2 ]

4 голосов
/ 04 января 2012

N является частью строкового литерала Unicode, как и кавычки.Возможно, вы пытались добавить N с именем @parameter, но это необязательно (даже неправильно).

Поэтому вызов вашего SP в T-SQL с использованием синтаксиса, подобного

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

, являетсядостаточно.

Если вы вызываете SP из .Net через SqlCommand и т. д., дополнительный код не требуется, поскольку .Net всегда использует строки Unicode.

0 голосов
/ 04 января 2012

Можете ли вы подтвердить, что типы данных столбцов в таблице pg_Pages соответствуют NVARCHAR, где это уместно?Если столбцы VARCHAR, то текст в кодировке Юникод будет преобразован в мусор без предупреждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...