以下是我调用存储过程的代码:
SqlCommand commandSql = new SqlCommand("GetbyProgramID")
commandSql.CommandType = CommandType.StoredProcedure;
//commandSql.Parameters.Add("@program_id", SqlDbType.VarChar, 5, programID);
commandSql.Parameters.Add("@program_id", System.Data.SqlDbType.VarChar, 5).Value = programID;
SqlParameter returnValue = new SqlParameter("@result", SqlDbType.Int);
returnValue.Direction = ParameterDirection.Output;
commandSql.Parameters.Add(returnValue);
DBAccessHelper.Execute(commandSql);
var result = returnValue.Value != System.DBNull.Value ? returnValue.Value.ToString() : string.Empty;
return result;
这是我的存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar,
@result int OUTPUT
AS
BEGIN
SELECT @result = system_id
FROM dbo.agency_mapping
WHERE program_id = @program_id
RETURN
END
我总是在C#代码中得到一个空值。
不确定我做错了什么。
我传递的值是正确的。
缺少什么重要的东西?
答案 0 :(得分:3)
您已宣布
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar,
@result int OUTPUT
这意味着您的存储过程会收到一个名为@program_id的参数,其大小为1 char。可能因为这个原因你的SELECT失败了。
请尝试声明
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar(5),
@result int OUTPUT
来自您的C#代码。
不要删除C#代码中的大小,因为让Sql Server Engine准备一个可以在第二次调用查询时可以重用的优化计划是很有用的。
答案 1 :(得分:0)