【发布时间】:2016-07-25 09:16:52
【问题描述】:
今天真奇怪。
当我尝试使用 Entity Framework 中的 objectContext 调用 SQL Server 中的存储过程时,使用函数 ExecuteStoreCommand,它总是尝试将“字符串”值转换为“int”。我没有知道为什么。
即使我将输出设置为NvarChar 类型。
我的例外是
将 varchar 值 'text' 转换为 int 数据类型失败
这是我的 C# 代码:
public virtual string GetCardCodeLinkedToAttestation(string atBuisnessCode)
{
// Input param - String
SqlParameter atBuisnessCodeParameter = new SqlParameter("atBuisnessCode", atBuisnessCode);
// The output param - String
SqlParameter retval = new SqlParameter("retval", SqlDbType.NVarChar,15);
retval.Direction = ParameterDirection.Output;
((IObjectContextAdapter)this).ObjectContext.ExecuteStoreCommand("exec @retval = sp_GetCardCodeLinkedToAttestation @atBuisnessCode", atBuisnessCodeParameter, retval);
return (string)retval.Value;
}
这是我在 SQL Server 中的存储过程(我明确返回 'test' 以确保是一个字符串):
ALTER PROCEDURE [dbo].[sp_GetCardCodeLinkedToAttestation]
@atBuisnessCode nvarchar(9)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @retval varchar(15);
set @retval= '';
-- Insert statements for procedure here
SET @retval = (SELECT TOP 1 [CardCode]
FROM [SC-SAP01].[SWC_PROD].[dbo].[OCPR]
WHERE [U_Attestation] = @atBuisnessCode)
RETURN 'test';
END
GO
例外:
将 varchar 值 'text' 转换为 int 数据类型失败
我尝试设置值而不返回它,并在我的存储过程中声明输出,但返回的值始终为 NULL。
【问题讨论】:
-
存储过程的返回类型总是
int。如果您想要一个字符串,请使用output参数或将其放入结果集中 - 不要使用return。此外,在命名存储过程时应避免使用sp_作为前缀 - 它是为 Microsoft 的系统过程保留的。
标签: c# sql-server entity-framework stored-procedures