*(00)*

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  613 随笔 :: 0 文章 :: 45 评论 :: 159万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
复制代码
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   *(00)*  阅读(722)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2017-11-30 Mycat 数据库分库分表中间件
点击右上角即可分享
微信分享提示