首页 > 解决方案 > 传递阿拉伯语文本并检查在哪里给出错误或转换?

问题描述

我必须从使用 C# 通过 SQL Server 中的存储过程传递参数来找出现有的数据记录。

像那样

storedprocedurename @strclause nvarchar(200) 

然后是我的完整程序流程。现在讨论的重点来了,当我将参数从 c# 传递给过程参数时,阿拉伯语中的参数就像 'أفغانستاني' 转换为 '????????' 当我在查询分析器中使用 N 前缀检查程序时,它工作正常。但是当我使用 c# 从后面的代码中传递它时。像 N'أفغانستاني' 然后查询转换为完整的字符串,如 'N''أفغانستاني' 并使用 N'أفغانستاني' 再次转换为 'N'?????????'。

现在的问题是如何获得与 N 前缀的精确匹配,以及如何通过将参数传递给存储过程来实现。在普通查询中,它工作正常,但在存储过程中,我需要帮助。

ALTER PROCEDURE [dbo].[MigrateNewVisa]
    @CompanyID UNIQUEIDENTIFIER,
    @VisaNos NVARCHAR(100),
    @VisaTypeIDs NVARCHAR(500), -- This is comes from c# and Arabic text but converted to ??????
    @scdate DATETIME,
    @createdby NVARCHAR(120),
    @modifyby NVARCHAR(120),
    @borderno NVARCHAR(100)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @VisaTypeID  NVARCHAR(40)
    SET @VisaTypeID = (SELECT DBO.BVF_Get_VisaTypeIdByEnArName(@VisaTypeIDs)

    -- Insert statements for procedure here
    INSERT INTO [VisaDetails] ([ID], [CompanyID], [VisaNo], [VisaTypeID],
                               [CreatedBy], [modifyby], [borderno])
    VALUES (NEWID(), @CompanyID, @BlockVisaNos, @VisaTypeID,
            @createdby, @modifyby, @borderno)
END

我需要数据值来自现有记录

由于 ???? 导致 ID 值不匹配 来自传入参数的阿拉伯文本,其中存在值

SET @VisaTypeID = (SELECT DBO.BVF_Get_VisaTypeIdByEnArName(@VisaTypeIDs)

标签: c#.netsql-server

解决方案


推荐阅读