打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQLite大量insert
001.using System;
002.using System.Collections.Generic;
003.using System.Data;
004.using System.Data.SQLite;
005.using System.Diagnostics;
006.using System.Text.RegularExpressions;
007.using Utility;
008. 
009.namespace DAL
010.{
011.    /// <summary>
012.    /// 数据存取层模块
013.    /// 用途:批次数据处理
014.    /// 作者:林大猫
015.    /// </summary>
016.    public class BatchWork
017.    {
018.        DataAccessLayerSqlite dal = new DataAccessLayerSqlite();
019.        /// <summary>
020.        /// 插入表格指令
021.        /// </summary>
022.        /// <param name="TableName">表格名</param>
023.        /// <param name="condition">where条件</param>
024.        /// <param name="InData">要输入的数据数组</param>
025.        public void InsertTable(string TableName, string[] InData)
026.        {
027.            string sql = string.Empty;
028.            try
029.            {
030.                if (InData.Length == 0)
031.                {
032.                    return;
033.                }
034.                string columnName = GetColumnName(TableName);
035.                string columnNameParm = GetColumnNameParm(TableName);
036.                string[] columnNameArray = GetColumnNameArrary(TableName);
037.                sql = " insert into " + TableName + "(" + columnName + " ) values ( " + columnNameParm + " )";
038.                List<SQLiteParameter> sqlParm = new List<SQLiteParameter>();
039.                for (int i = 0; i < InData.Length; i++)
040.                {
041.                    sqlParm.Add(new SQLiteParameter(columnNameArray[i], DbType.String));
042.                    sqlParm[i].Value = string.Copy(InData[i]);
043.                }
044.                dal.NonQueryResultNoTranc(sql, sqlParm.ToArray());
045.            }
046.            catch (Exception e)
047.            {
048.                throw e;
049.            }
050.        }
051. 
052. 
053. 
054.        /// <summary>
055.        /// 从文字文件写入表格.
056.        /// </summary>
057.        /// <param name="tableName">Name of the table.</param>
058.        /// <param name="fileName">Name of the file.</param>
059.        public void InsertTableFromTextFile(string tableName, string fileName)
060.        {
061.            string sql = string.Empty;
062.            if (fileName.Length == 0)
063.            {
064.                return;
065.            }
066.            int[] format = GetColumnLengths(tableName);
067.            int remainder = 1000;
068.            List<string> textContent = fileName.ImportText();
069.            string columnName = GetColumnName(tableName);
070.            string columnNameParm = GetColumnNameParm(tableName);
071.            string[] columnNameArray = GetColumnNameArrary(tableName);
072.            sql = " insert into " + tableName + "(" + columnName + " ) values ( " + columnNameParm + " )";
073.            using (SQLiteConnection Sql_Conn = new SQLiteConnection(dal.connectionString))
074.            {
075.                Sql_Conn.Open();
076.                SQLiteTransaction Sql_Transaction;
077.                Sql_Transaction = Sql_Conn.BeginTransaction(System.Data.IsolationLevel.Serializable);
078.                for (int i = 0; i < textContent.Count; i++)
079.                {
080.                    List<string> InData = textContent[i].SplitString(format);
081.                    List<SQLiteParameter> sqlParm = new List<SQLiteParameter>();
082.                    for (int j = 0; j < format.Length; j++)
083.                    {
084.                        sqlParm.Add(new SQLiteParameter(columnNameArray[j], DbType.String));
085.                        sqlParm[j].Value = string.Copy(InData[j]);
086.                    }
087.                    SQLiteCommand Sql_Command = new SQLiteCommand(sql, Sql_Conn);
088.                    Sql_Command.Transaction = Sql_Transaction;
089.                    dal.PrepareCommand(ref Sql_Command, Sql_Conn, sql, sqlParm.ToArray());
090.                    Sql_Command.ExecuteNonQuery();
091.                    try
092.                    {
093.                        if (i == textContent.Count - 1)
094.                        {
095.                            Sql_Transaction.Commit();
096.                        }
097.                        else if (i > remainder && i % remainder == 0)
098.                        {
099.                            Sql_Transaction.Commit();
100.                            Sql_Transaction = Sql_Conn.BeginTransaction(System.Data.IsolationLevel.Serializable);
101.                        }
102.                        else
103.                        {
104.                            ;
105.                        }
106.                    }
107.                    catch (Exception ex)
108.                    {
109.                        Debug.Write(ex.ToString());
110.                        Sql_Transaction.Rollback();
111.                    }
112.                }
113. 
114.            }
115.        }
116. 
117. 
118.        /// <summary>
119.        /// 取得字段名称
120.        /// </summary>
121.        /// <param name="TableName">表格名</param>
122.        /// <returns>表格名称字符串用逗号分隔</returns>
123.        public static string GetColumnName(string TableName)
124.        {
125.            DAL.DataAccessLayerSqlite dal = new DAL.DataAccessLayerSqlite();
126.            DataTable dtSource = dal.GetQueryResultToDataTable("PRAGMA table_info( '" + TableName + "' );", null);
127.            List<string> columnNames = new List<string>();
128.            foreach (DataRow tableInfo in dtSource.Rows)
129.            {
130.                columnNames.Add(tableInfo["name"].ToString());
131.            }
132.            return string.Join(" , ", columnNames.ToArray());
133.        }
134. 
135.        /// <summary>
136.        /// 取得字段名称
137.        /// </summary>
138.        /// <param name="TableName">表格名</param>
139.        /// <returns>表格名称字符串用逗号分隔</returns>
140.        public string[] GetColumnNameArrary(string TableName)
141.        {
142.            DAL.DataAccessLayerSqlite dal = new DAL.DataAccessLayerSqlite();
143.            DataTable dtSource = dal.GetQueryResultToDataTable("PRAGMA table_info( '" + TableName + "' );", null);
144.            List<string> columnNames = new List<string>();
145.            foreach (DataRow tableInfo in dtSource.Rows)
146.            {
147.                columnNames.Add(tableInfo["name"].ToString());
148.            }
149.            return columnNames.ToArray();
150.        }
151.        /// <summary>
152.        /// 取得字段名称参数
153.        /// </summary>
154.        /// <param name="TableName">表格名</param>
155.        /// <returns>表格名称字符串用逗号分隔</returns>
156.        public string GetColumnNameParm(string TableName)
157.        {
158.            DAL.DataAccessLayerSqlite dal = new DAL.DataAccessLayerSqlite();
159.            DataTable dtSource = dal.GetQueryResultToDataTable("PRAGMA table_info( '" + TableName + "' );", null);
160.            List<string> columnNames = new List<string>();
161.            foreach (DataRow tableInfo in dtSource.Rows)
162.            {
163.                columnNames.Add("@" + tableInfo["name"].ToString());
164.            }
165.            return string.Join(" , ", columnNames.ToArray());
166.        }
167. 
168.        /// <summary>
169.        /// 根据表格的Create sql取得字段长度.
170.        ///
171.        /// </summary>
172.        /// <param name="TableName">Name of the table.</param>
173.        /// <returns></returns>
174.        public int[] GetColumnLengths(string TableName)
175.        {
176.            /* 格式如下
177.             * CREATE TABLE Bank (
178.                [Filter1]       [CHAR](1),
179.                [UnitNo]        [CHAR](3),
180.                [GroupNo]       [CHAR](4),
181.                [Filter2]       [CHAR](1),
182.                [GroupName]     [CHAR](40),
183.                [GroupNickName] [CHAR](10),
184.                [Address]       [CHAR](40),
185.                [Filter3]       [CHAR](1),
186.                [PhoneSecNum]   [CHAR](3),
187.                [PhoneNum]      [CHAR](8),
188.                [Filter4]       [CHAR](1),
189.                [ValueDate]     [CHAR](7),
190.                [ChangeType]    [CHAR](1),
191.                [DefaultCode]   [CHAR](1),
192.                [Remark]        [CHAR](2),
193.                [Blank]         [CHAR](8)
194.            );*/
195.            Regex MyRegex = new Regex(
196.             ".*\\[(?<ColumnName>.*)\\]\\s+\\[(?<ColumnType>.*)\\]\\((?<Len" +
197.             "gth>\\d{1,})\\).*",
198.           RegexOptions.IgnoreCase
199.           | RegexOptions.CultureInvariant
200.           | RegexOptions.IgnorePatternWhitespace
201.           | RegexOptions.Compiled
202.           );
203. 
204.            SplitItems items = new SplitItems(MyRegex);
205. 
206.            DAL.DataAccessLayerSqlite dao = new DAL.DataAccessLayerSqlite();
207. 
208.            DataTable dt = dao.GetQueryResultToDataTable(DAL.DbInfoDao.GetAllDbInfromation(), null);
209.            //return;
210.            DataRow[] selectedrows = dt.Select("Trim(TABLE_NAME)='" + TableName + "'");
211.            if (selectedrows.Length > 1 || selectedrows.Length == 0)
212.            {
213.                throw new Exception("找不到表格名称!");
214.            }
215.            List<int> columnLengths = new List<int>();
216. 
217.            foreach (DataRow dr in selectedrows)
218.            {
219.                DataTable dbinformation = items.StartSplit(dr["sql"].ToString());
220.                foreach (DataRow dvitem in dbinformation.Rows)
221.                {
222.                    columnLengths.Add(int.Parse(dvitem["Length"].ToString()));
223.                }
224.            }
225.            return columnLengths.ToArray();
226.        }
227.    }
228.}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
System.Data.SQLite
Sqlite中判断表、字段是否存在的方法
C#使用System.Data.SQLite操作SQLite
iOS --database--sqlite(数据库)
C#.NET操作数据库通用类(MS SQL Server篇)
C# 通过DataGridView更新数据库
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服