Varchar 值未传递到 SQL 服务器存储过程
Varchar value not passing into SQL Server stored procedure
以下是调用存储过程的代码:
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# 代码中的结果总是空值。
不确定我做错了什么。
我传递的值是正确的。
遗漏了什么重要的东西?
您已声明
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar,
@result int OUTPUT
这意味着您的存储过程接收到一个名为@program_id 的参数,大小为 1 个字符。可能是因为这个原因你的 SELECT 失败了。
尝试声明
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar(5),
@result int OUTPUT
来自您的 C# 代码。
不要删除 C# 代码中的大小,因为让 Sql 服务器引擎准备一个优化计划很有用,如果您第二次调用查询,可以重复使用该计划。
将您的 SP 更改为
@program_id varchar(5)
编辑:根据Steve回答,我更新了删除参数大小的内容。
以下是调用存储过程的代码:
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# 代码中的结果总是空值。
不确定我做错了什么。
我传递的值是正确的。
遗漏了什么重要的东西?
您已声明
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar,
@result int OUTPUT
这意味着您的存储过程接收到一个名为@program_id 的参数,大小为 1 个字符。可能是因为这个原因你的 SELECT 失败了。
尝试声明
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar(5),
@result int OUTPUT
来自您的 C# 代码。
不要删除 C# 代码中的大小,因为让 Sql 服务器引擎准备一个优化计划很有用,如果您第二次调用查询,可以重复使用该计划。
将您的 SP 更改为
@program_id varchar(5)
编辑:根据Steve回答,我更新了删除参数大小的内容。