如何保持asp.net传递给存储过程的字符串的一致性?

时间:2018-07-12 20:25:12

标签: c# asp.net sql-server

我有这样的存储过程:

CREATE PROCEDURE [dbo].[XY]
    @FILTER NVARCHAR(MAX) = NULL
AS
    BEGIN
...
...

因此,此过程最多需要一个参数-对吗?

现在让我们考虑一下此ASP.NET代码:

using (MainContext ctx = new MainContext())
{
    var cmd = ctx.Database.Connection.CreateCommand();
    cmd.CommandText = 'XY';
    cmd.CommandType = System.Data.CommandType.StoredProcedure;

    if (param_list != null && param_list.Count > 0)
    {
        cmd.Parameters.AddRange(param_list.ToArray());
    }

    try
    {
        // Run the stored procedure
        ctx.Database.Connection.Open();
        var reader = cmd.ExecuteReader();
        p_Entity01 = 
            ((IObjectContextAdapter)ctx).ObjectContext.Translate<TEntity01>(reader).ToList();
    }
    catch (Exception e)
    {
        throw e;
    }
    finally
    {
        ctx.Database.Connection.Close();
    }
}

假设“ param_list”包含一个字符串“čefer”。当我的程序XY以给定的参数'param_list'运行时,@ FILTER应该等于'čefer'对吗?

但是没有发生任何预期的事情。 @FILTER ='cefer'。

当我使用显式声明的变量@FILTER NVARCHAR(MAX)='čefer'运行XY过程时,然后@FILTER ='cefer'。

如果我尝试@FILTER NVARCHAR(MAX)=N'čefer',那么@FILTER ='čefer',这就是我想要的。

但是,此字符串由asp.net传递给过程。

在调用过程之前,我尝试在asp.net中使用给定的字符串格式(即“N'čefer”)。

这个故事也出现在“Ď”上。 Š,Ž..效果很好,所以我看不到某些字母有效的模式,而另一些字母则无效。

请问您对此有任何经验吗?

谢谢

编辑

param_list的设置如下

Param = new SqlParameter("@FILTER", DbType.String)
    { Value = searchCriteria.TrimEnd(new char[] { ';' }) };
param_list.Add(Param); 

0 个答案:

没有答案