一个函数用于多个c#存储过程
本文关键字:用于 存储过程 一个 函数 | 更新日期: 2023-09-27 17:51:18
我有一个执行存储过程的函数。问题是,我希望将这个函数用于接受不同参数的多个存储过程。
当然,如果我这样做,我将得到一个错误,说
过程或函数指定的参数太多
我想做的是创建这样一个函数,当它执行一个存储过程时,该存储过程只接受它需要的参数,而忽略其他参数。这可能吗?
到目前为止我写的是:
try
{
using (SqlConnection con = new SqlConnection(consr))
{
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
cmd.CommandText = stp;
cmd.Parameters.Add(new SqlParameter("@proc1", cmb1.SelectedItem.ToString()));
cmd.Parameters.Add(new SqlParameter("@proc2", cmb2.SelectedItem.ToString()));
cmd.Parameters.Add(new SqlParameter("@proc3", cmb3.SelectedItem.ToString()));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
con.Open();
reader = cmd.ExecuteReader();
con.Close();
}
}
catch (SqlException exp)
{
throw new InvalidOperationException(exp.Message);
}
这里有两个过程:
ALTER PROCEDURE [dbo].[test1]
@proc1 varchar(20)
AS
Begin
select * from tab where name=@proc1
END
和
ALTER PROCEDURE [dbo].[test1]
@proc2 varchar(20)
AS
Begin
select * from tab where name=@proc2
END
我想使用相同的函数来执行
您可以将不想使用的参数设置为null,然后检查哪些值可用并相应地响应
ALTER PROCEDURE [dbo].[test1]
@proc1 varchar(20) = null
@proc2 varchar(20) = null
@proc3 varchar(20) = null
AS
Begin
IF @proc1 IS NOT NULL BEGIN
select * from tab where name=@proc1
END
END
让您的函数接受两个参数,SP的名称和SP参数名称及其相应值的2d数组。然后通过迭代2d数组并在循环中添加参数来设置sql命令。
如果您需要返回多个结果集,请参见这里:如何使用SqlCommand返回多个结果集?并修改函数和参数,使它们接受一个由SP名组成的数组和一个由2d数组组成的数组,其中包含每个SP的SP参数名和值。
我认为你应该使用这个结构:
CREATE PROCEDURE MyProcName
@Parameter1 INT = 1,
@Parameter2 VARCHAR (100) = 'StringValue',
@Parameter3 VARCHAR (100) = NULL
AS
/* check for the NULL / default value (indicating nothing was passed */
if (@Parameter3 IS NULL)
BEGIN
/* whatever code you desire for a missing parameter*/
INSERT INTO ........
END
/* and use it in the query as so*/
SELECT *
FROM Table
WHERE Column = @Parameter
您能分享一下存储过程代码吗?我认为您需要在函数中使用if else或case语句,并在函数中调用具有所需参数的适当存储过程。