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!");
 
 
        }
    }

  

posted on 2020-08-07 10:49  lingtw  阅读(884)  评论(0)    收藏  举报

导航