我有这样的存储过程:
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);