如何使用对象和模态的列表(List <object>)将数据插入数据库?

时间:2016-07-29 05:47:02

标签: c# asp.net sql-server

大家好我正在尝试使用asp.net中的mvc向数据库插入一些值。我听说插入数据时使用对象会很好。那么我如何通过类中设计的属性使用对象列表来实现这一点。

有一个名为

的课程
public class Customer
    {
        public string Name { get; set; }
        public string Company { get; set; }
        public int Telephone { get; set; }
        public string Email { get; set; }
        public int Id { get; set; }
    }

所以我有另一个只执行sql命令的类

DBAccess.cs

public List<Customer> AddCustomers(string spName)
        {
            List<Customer> customers = new List<Customer>();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = spName;
        }

我知道使用Idata Reader使用可以获取像这样的数据库中的值

IDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                Customer cus = new Customer();

                cus.Name = reader["cus_name"].ToString();
                cus.Id = Convert.ToInt32(reader["cid"]);

                customers.Add(cus);
            }

如何使用这种方案将数据插回数据库?帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

在基础上,您必须创建一个SQL插入命令以插入到DB中。所以,你可以尝试以下方法。此方法将获取列表和表名作为参数。循环内部反射用于在键值对列表中插入值。

public static bool Insert(List<YourModel> datas, string table)
{
    bool result = false;
    List<KeyValuePair<string, string>> values = new List<KeyValuePair<string, string>>();

    SqlConnection con = new SqlConnection("your connection string");
    con.Open();

    try
    {
        foreach (var data in datas)
        {

            values.Clear();
            foreach (var item in data.GetType().GetProperties())
            {          
                 values.Add(new KeyValuePair<string, string>(item.Name, item.GetValue(data).ToString()));
            }

            string xQry = getInsertCommand(table, values);
            SqlCommand cmdi = new SqlCommand(xQry, con);
            cmdi.ExecuteNonQuery();
        }
        result = true;
    }
    catch(Exception ex)
    { throw ex; }
    finally { con.Close(); }
    return result;
}

在以下方法中,键值对列表将传递给另一个函数以生成insert命令。

private static string getInsertCommand(string table, List<KeyValuePair<string, string>> values)
{
    string query = null;
    query += "INSERT INTO " + table + " ( ";
    foreach (var item in values)
    {
        query += item.Key;
        query += ", ";
    }
    query = query.Remove(query.Length - 2, 2);
    query += ") VALUES ( ";
    foreach (var item in values)
    {
        if (item.Key.GetType().Name == "System.Int") // or any other numerics
        {
            query += item.Value;
        }
        else
        {
            query += "'";
            query += item.Value;
            query += "'";
        }
        query += ", ";
    }
    query = query.Remove(query.Length - 2, 2);
    query += ")";
    return query;
}