datatable写入sqlite

public class DataTableToSQLte

 {
     private string tableName;
 
     public string TableName
     {
         get { return tableName; }
         set { tableName = value; }
     }
     private string insertHead;
 
     public string InsertHead
     {
         get { return insertHead; }
     }
 
     private string[] separators;
 
     public string[] Separators
     {
         get { return separators; }
         set { separators = value; }
     }
 
     private string insertCmdText;
 
     private int colCount;
     private string[] fields;
 
     public DataTableToSQLte(DataTable dt)
     {
         List<string> myFields = new List<string>();
         List<string> mySeparators = new List<string>();
         List<string> valueVars = new List<string>();// insert command text
         colCount = dt.Columns.Count;
 
         for (int i = 0; i < colCount; i++)
         {
             string colName = dt.Columns[i].ColumnName;
             myFields.Add(colName);
             mySeparators.Add(GetSeperator(dt.Columns[i].DataType.ToString()));
             valueVars.Add("@" + colName);
         }
         insertHead = string.Format("insert into {0} ({1})"
             , dt.TableName
             , string.Join(",", myFields.ToArray()));
         separators = mySeparators.ToArray();
 
         insertCmdText = string.Format("{0} values ({1})", insertHead
             , string.Join(",", valueVars.ToArray()));
 
         fields = myFields.ToArray();
 
     }
 
     private string GetSeperator(string typeName)
     {
         string result = string.Empty;
         switch (typeName)
         {
             case "System.String":
                 result = "'";
                 break;
 
             default:
                 result = typeName;
                 break;
         }
 
         return result;
     }
 
 
     public string GenInsertSql(DataRow dr)
     {
         List<string> strs = new List<string>();
         for (int i = 0; i < colCount; i++)
         {
             if (DBNull.Value == dr[i])  //null or DBNull
                 strs.Add("null");
             else
                 strs.Add(string.Format("{0}{1}{0}", separators[i], dr[i].ToString()));
         }
         return string.Format("{0} values ({1})", insertHead, string.Join(",", strs.ToArray()));
     }
 
     public void ImportToSqliteBatch(DataTable dt, string dbFullName)
     {
         string strConn = string.Format("data source={0}", dbFullName);
         using (SQLiteConnection conn = new SQLiteConnection(strConn))
         {
             using (SQLiteCommand insertCmd = conn.CreateCommand())
             {
                 insertCmd.CommandText = insertCmdText;
                 conn.Open();
                 SQLiteTransaction tranction = conn.BeginTransaction();
                 foreach (DataRow dr in dt.Rows)
                 {
                     for (int i = 0; i < colCount; i++)
                     {
                         object o = null;
                         string paraName = "@" + fields[i];
                         if (DBNull.Value != dr[fields[i]])
                             o = dr[fields[i]];
                         insertCmd.Parameters.AddWithValue(paraName, o);
                     }
                     insertCmd.ExecuteNonQuery();
                 }
                 tranction.Commit();
             }
         }
     }
 
 
     private void Example()
     {
         string dbName = AppDomain.CurrentDomain.BaseDirectory + "test.db";
         DataTable dt = MyCommon.ConvertXmlToDataTable(MyCommon.ReadXmlStringFromFile("Dt1.xml"));
         DataTableToSQLte myTabInfo = new DataTableToSQLte(dt);
         myTabInfo.ImportToSqliteBatch(dt, dbName);
         //MessageBox.Show("Ok!");
 
 
     }
 }
原文地址:https://www.cnblogs.com/zouhao/p/14061613.html