如何使用我的代码将值传递给存储过程中的Specified参数?

时间:2017-11-21 05:38:17

标签: c# asp.net stored-procedures parameters

以下是我的代码

public static DataSet GetDataSet(string storedProcedure, params object[] parameters)
{
    ConnectionHelper c = new ConnectionHelper();
    c.opencon();
    c.getcmd.CommandType = CommandType.StoredProcedure;
    c.getcmd.CommandText = storedProcedure;
    c.getcmd.Parameters.Clear();

    SqlCommandBuilder.DeriveParameters(c.getcmd);
    int i = 0, j = 0;

    foreach (SqlParameter SPParams in c.getcmd.Parameters)
    {
        if (j > 0)
        {
            SPParams.Value = parameters[i];
            i++;
        }
        j++;
    }

    DataSet ds = new DataSet();

    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = c.getcmd;
    da.Fill(ds);

    return ds;
}

2 个答案:

答案 0 :(得分:0)

而不是:

public static DataSet GetDataSet(string storedProcedure, params object[] parameters)

尝试将参数作为键值对传递。例如:

public static DataSet GetDataSet(string storedProcedure, params KeyValuePair<string, object> parameters)

string将存储参数的名称,object将保存该值。 这样,您可以通过命名参数传递值。只会设置这些参数的值,其余值将保持为空(顺序并不重要)

用法:

foreach (var param in parameters)
{
   c.getcmd.Parameters.Add(new SqlParameter(param.Key, param.Value));
}

答案 1 :(得分:0)

我相信你正在寻找这样的东西。这里一个存储过程与所有插入更新删除一起选择。 @QueryType必须每次都传递所有,但是其余的变量只需要在需要时调用,因为如果没有传递值,它分别会分配默认值。

示例&gt;&gt; MyTable有3个字段,ID(int PK autoincrease,Field1 int,Field2 varchar(20),下面是单个存储过程。

name
相关问题