【发布时间】:2017-09-12 10:40:29
【问题描述】:
我正在使用 .net 应用程序中的 EF5 调用存储过程 [MS SQL]
来自 EF 的电话
return base.ExecuteFunction<sp_select_contracts_Result>("sp_select_contracts", x, y, z);
在proc中参数定义为@para1 CHAR(2)等
但在 SQL Profiler 中,我发现 EF 发送以下内容
exec [dbo].[sp_select_contracts_statistics] @x='15 '@y='24 ',@z='2010 '
完全一样 - 实际值后面有大量空格。
当我将 CHAR 更改为 VARCHAR 时,它可以正常工作:
exec [dbo].[sp_select_contracts_statistics] @x='15','@y='24,@z='2010'
我可以轻松解决这个问题,但我想知道我缺少什么 在这里。
更新:
忘了提到在 C# 中所有的值都是字符串。
在通过 EF 之前来自 c# 的最后一次调用中,值是正确的:
x = "15" {String}等..
编辑2: 将 CHARS 更改为 VARCHARS 按预期工作。仍然希望知道这是一个错误还是我们缺少的东西。
【问题讨论】:
-
您的应用程序中的参数是如何定义的?很明显,传递所有空格的是应用程序...
-
啊,我忘记了那部分:/它们都是字符串,在通过 EF 之前的最后一次调用中,值是正确的。
-
我不懂 C#,但字符串在那些定义中没有 SIZE 吗?例如,当您定义 char 数据类型时,您还应该精确地确定大小:例如 char(50)。如果你不这样做,默认大小是 1。难道在 C# 中也有一个默认大小,比如 8000,如果你没有明确定义它,它使用那个默认大小?
标签: sql-server entity-framework c#-4.0 entity-framework-5