zoukankan      html  css  js  c++  java
  • 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!");
     
     
         }
     }
  • 相关阅读:
    Windbg命令学习11(.dump)
    Windbg命令学习13(ln和伪寄存器)
    Windbg命令学习15(bp bm bu bl bc ba断点)
    Windbg命令学习16(!gle和g和p)
    Windbg命令学习0 (.symfix和.cls和设置Log文件)
    API拦截方法一:PE简介
    Windbg命令学习12(.lastevent和!analyze)
    Windbg命令学习14(dv)
    Davinci DM6446开发攻略——LINUX GPIO驱动源码移植
    Centos 编译安装高版本Python方法
  • 原文地址:https://www.cnblogs.com/zouhao/p/14061613.html
Copyright © 2011-2022 走看看