一个函数用于多个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

我想使用相同的函数来执行

一个函数用于多个c#存储过程

您可以将不想使用的参数设置为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语句,并在函数中调用具有所需参数的适当存储过程。