大家好我正在尝试使用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);
}
如何使用这种方案将数据插回数据库?帮助将不胜感激。
答案 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;
}