我想做同样的功能,传递两个参数,如
myClass mc=new myClass();
mc.values("string_col1","string_val1");
mc.values("string_col2","string_val2");
我通过存储过程在数据库中为插入值创建单独的类,我的函数是
public void sp_insert(string pro_name, string pro_val)
{
cnnction.Open();
cm.CommandText = pro_name;
cm.Connection = cnnction;
cm.CommandType = CommandType.StoredProcedure;
string[] name = pro_val.Split('|');
for (int i = 0; i < name.Length; i++)
{
string[] var = name[i].Split(',');
cm.Parameters.AddWithValue(var[0], var[1]);
}
cm.ExecuteNonQuery();
cnnction.Close();
}`
现在,当我调用此方法时,我想要这个
sp_insert("procedure_name",mc);
上一次上班就像这样
sp_insert("procedure_name","@col1,value1|@col2,value2")
我知道这是@或者最糟糕的工作请帮忙
答案 0 :(得分:0)
就像@Daniel说的那样,你可以使用Dictionary
。
将sp_insert
方法更改为:
public void sp_insert(string pro_name, Dictionary<string,string> pro_val)
{
cnnction.Open();
cm.CommandText = pro_name;
cm.Connection = cnnction;
cm.CommandType = CommandType.StoredProcedure;
foreach (var item in pro_val)
{
cm.Parameters.AddWithValue(item.Key, item.Value);
}
cm.ExecuteNonQuery();
cnnction.Close();
}
在您调用此方法的任何地方,将此字典传递给它
Dictionary<string,string> var = new Dictionary<string, string>();
var.Add("@param1","paramValue1");
var.Add("@param2", "paramValue2");
答案 1 :(得分:0)
您可能正在寻找params关键字: https://msdn.microsoft.com/en-us/library/w5zay9db.aspx
public void sp_insert(string pro_name, params string[] pro_val)
{
for (int i = 0; i < pro_val.Length; i++)
{
Console.Write(pro_val[i] + " ");
}
`enter code here`[...]
}
您可能还想创建一个用于包装这些值的类:
public class ColValueWrap
{
public string Col { get; set;}
public string Val { get; set; }
public ColValueWrap(string col, string val)
{
Col = col;
Val = val;
}
}
所以你可以像这样使用它:
public void sp_insert(string pro_name, params ColValueWrap[] pro_vals)
{
foreach (var val in pro_vals)
{
Console.WriteLine(val.Col + ":" + val.Val);
}
`enter more code here`[...]
}
sp_insert("procedure_name",new ColValueWrap("@col1", "val1"), new ColValueWrap("@col2", "val2"));