【问题标题】:Stored procedure returns 0 record with persian text with ی存储过程返回带有 ی 的波斯文本的 0 记录
【发布时间】:2016-11-17 07:53:53
【问题描述】:

我有一个如下所示的存储过程。当我发送包含波斯字母 'ی' 的参数时,它不会返回任何记录。 我以前用过N,但是没用。

ALTER PROCEDURE [DB].[sp_Acceptor_SelectByDynamicField_ForChart]
    @ProjectType    NVARCHAR(50)=NULL,  
    @FromDate datetime=NULL,
    @ToDate datetime=NULL
AS
BEGIN   
    SET NOCOUNT ON;

        DECLARE @Where VARCHAR(MAX),
                @SQL   VARCHAR(MAX)           

    SET @Where = ' WHERE 1=1 '

    IF ( @ProjectType IS NOT NULL )
            SET @Where = @Where + ' AND  ProjectType = N''' + @ProjectType + ''' '           

    IF ( @FromDate IS NOT NULL  AND  @ToDate IS NOT NULL )
            SET @Where = @Where + ' AND  PmDate BETWEEN    ''' + CONVERT(nvarchar(50),(@FromDate),101) + '''        AND ''' + CONVERT(nvarchar(50),@ToDate, 101) + '''  '                                 

    SET @SQL = 'SELECT  * From Acceptor  ' + @Where

    EXEC (@SQL)

END

【问题讨论】:

  • ProjectType = N''' + @ProjectType + ''' ' 应该改为ProjectType LIKE N''%' + @ProjectType + '%'' '

标签: c# asp.net sql-server stored-procedures


【解决方案1】:

不确定这是否会解决您所询问的问题,但有更好的方法来编写此存储过程。照原样,您的存储过程容易受到 SQL 注入攻击。
试试这个:

ALTER PROCEDURE [itnarenj.ir_DB].[sp_Acceptor_SelectByDynamicField_ForChart]
    @ProjectType    NVARCHAR(50)=NULL,  
    @FromDate datetime=NULL,
    @ToDate datetime=NULL
AS
BEGIN   
    SET NOCOUNT ON;


    SELECT *
    FROM Acceptor
    WHERE (ProjectType = @ProjectType OR @ProjectType IS NULL)
    AND (
            @FromDate IS NULL OR @ToDate IS NULL
            OR
            (
            PmDate >= @FromDate
            AND PmDate <= @ToDate
            )        
        )

END

【讨论】:

  • 非常感谢,它解决了问题.. 非常感谢您
猜你喜欢
  • 1970-01-01
  • 2014-05-23
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多