今天真的很奇怪。
当我尝试使用函数框架中的objectContext
在SQL Server中调用存储过程时,使用函数ExecuteStoreCommand
,它总是尝试将'string'值转换为'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。
答案 0 :(得分:2)
这里需要使用Output作为return将始终返回int数据类型。
默认情况下,成功执行存储过程将返回0
请尝试以下代码:
@atBuisnessCode nvarchar(9),
@retval varchar(15) OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
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
答案 1 :(得分:0)
我发现,最后我使用(ExecuteStoreQuery)而不是(ExecuteStoreCommand)。我把我的sql直接放在里面。并且它返回了我选择的字符串结果。简单 。谢谢你试着帮助我;-)。
public virtual string GetCardCodeLinkedToAttestation(string atBuisnessCode)
{
string return_value = ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<string>
(string.Format("SELECT TOP 1 [CardCode] FROM [SC-SAP01].[SWC_PROD].[dbo].[OCPR] WHERE [U_Attestation] = '{0}'", atBuisnessCode)).FirstOrDefault();
return string.IsNullOrWhiteSpace(return_value) ? string.Empty : return_value;
}