我正在开发一个在VS 2010中开发的多语言Web应用程序 - ASP.Net(C#)。
如果我使用没有存储过程的简单插入语句(例如
),我可以毫无问题地插入它Insert INTO Test (E,A) VALUES('Some English Text',N'الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ الرَّحْمَٰنِ الرَّحِيمِاللَّهِ الرَّحْمَٰنِ')
当我为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 :(得分:4)
N是Unicode字符串文字的一部分,就像引号一样。您可能尝试使用@parameter名称添加N,但这不是必需的(甚至是错误的)。
所以使用
之类的语法在T-SQL中调用SPEXEC usp_AddNewPageDetails 'english text', N'arab text', etc.
就足够了。
如果您通过SqlCommand等从.Net调用SP,则不需要其他代码,因为.Net始终使用Unicode字符串。
答案 1 :(得分:0)
您能否确认表pg_Pages中列的数据类型是否适用于NVARCHAR?如果列是VARCHAR,则unicode文本将在没有警告的情况下转换为垃圾。