以下是我的代码
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;
}
答案 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