如何在C#上定义类似StringBuilder.Appand()的自定义函数

时间:2015-05-17 15:30:36

标签: c# asp.net .net function methods

我想做同样的功能,传递两个参数,如

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")

我知道这是@或者最糟糕的工作请帮忙

2 个答案:

答案 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"));