C#从实体类数组,直接映射到数据库的代码。项目代码
public void SaveToDb(String dbfilename,System.Object[] list)
{
String dbpath = FilePath + "\\" + dbfilename+".sqlite";
SQLiteHelper SQLiteHelper = new SQLiteHelper(dbpath);
Hashtable dbdatatype = new Hashtable();
dbdatatype.Add("System.Single", " FLOAT ");
dbdatatype.Add("System.Int32", " INT ");
dbdatatype.Add("System.Int64", " BIGINT ");
dbdatatype.Add("System.String", " varchar(65532) ");
//step 1 创建表
StringBuilder createsql = new StringBuilder();
Type type = list[0].GetType();
String tablename = type.ToString();
createsql.AppendFormat("CREATE TABLE [{0}] (", tablename);
PropertyInfo[] prop = type.GetProperties();
List<String> columns = new List<string>();
for (int i = 0; i < prop.Length; i++)
{
PropertyInfo PropertyInfo = prop[i];
String PropertyInfoName = PropertyInfo.Name;
String PropertyInfoType = PropertyInfo.PropertyType.FullName;
Console.WriteLine(PropertyInfoName + "--" + PropertyInfoType);
createsql.AppendFormat(" [{0}] {1}", PropertyInfoName, dbdatatype[PropertyInfoType]);
if (i + 1 == prop.Length)
{
createsql.Append(");");
}
else
{
createsql.Append(",");
}
columns.Add(PropertyInfoName);
}
//step 2 批量插入数据库
StringBuilder insertsql = new StringBuilder();
insertsql.Append("insert into [" + tablename + "](");
for (int i = 0; i < columns.Count; i++)
{
insertsql.Append(columns[i]);
if (i + 1 == columns.Count)
{
insertsql.Append(")");
}
else
{
insertsql.Append(",");
}
}
insertsql.Append(" values");
List<StringBuilder> inserlist = new List<StringBuilder>();
for (int i = 0; i < list.Length; i++)
{
System.Object obj = list[i];
if (obj == null)
{
continue;
}
StringBuilder values = new StringBuilder();
values.Append(" (");
for (int col = 0; col < columns.Count; col++)
{
String colname = columns[col];
System.Object value = obj.GetType().GetProperty(colname).GetValue(obj);
if (col + 1 == columns.Count)
{
values.Append("'" + value + "'");
}
else
{
values.Append("'" + value + "',");
}
}
values.Append(")");
inserlist.Add(values);
}
SQLiteHelper.ExecuteNonQuery(createsql, insertsql, inserlist);
}