1. 程式人生 > >C#把DataTable裡的資料批量匯入SQLite

C#把DataTable裡的資料批量匯入SQLite

原目的:從一個老的SQLite裡讀出資料,存到DataTable裡,然後儲存到一個新的SQLite資料庫中。

需要引用System.Data.SQLite.dll

try
            {
                SQLiteConnection Conn = new SQLiteConnection();
                DataTable dt = new DataTable();
                Conn.ConnectionString = <span style="font-family: Arial, Helvetica, sans-serif;">"Data Source=.\\OldData.db";</span>
                Conn.Open();  //開啟舊資料庫

                string sql = "SELECT tbl_name, sql FROM sqlite_master WHERE type='table' ORDER BY name";
                SQLiteDataAdapter oldadapter = new SQLiteDataAdapter(sql, Conn);
                oldadapter.Fill(dt);//獲得舊資料庫裡所有表的名字和CREATE命令

                string output = "NewData.db";
                SQLiteConnection.CreateFile(output);//建立新的資料庫
                SQLiteConnection conn = new SQLiteConnection();
                SQLiteConnectionStringBuilder connstr = new SQLiteConnectionStringBuilder();
                SQLiteDataAdapter adapter;
                connstr.DataSource = output;
                conn.ConnectionString = connstr.ToString();
                conn.Open(); //開啟新的資料庫
                Console.WriteLine("Created and opened a new database.");

                DataTable single;
                String tbl_name;
                String sqlstring;
                for (int k = 0; k < dt.Rows.Count; k++)
                {
                    tbl_name = dt.Rows[k][0].ToString();
                    sqlstring = dt.Rows[k][1].ToString();//CREATE TABLE命令

                    SQLiteCommand cmd = new SQLiteCommand();;
                    cmd.CommandText = sqlstring;
                    cmd.Connection = conn;
                    cmd.ExecuteNonQuery(); //建立新表

                    sql = string.Format("SELECT * FROM {0}", tbl_name);// "select * from " + tbl_name;
                    oldadapter = new SQLiteDataAdapter(sql, Conn);
                    single = new DataTable();
                    oldadapter.AcceptChangesDuringFill = false; //重要
                    oldadapter.Fill(single); //獲得老表裡的資料<pre name="code" class="csharp">                

//...................對資料進行處理
cmd = conn.CreateCommand(); cmd.CommandText = sql; adapter = new SQLiteDataAdapter(cmd); SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter); adapter.Update(single); //將DataTable裡的資料全部匯入新表 Console.WriteLine("Successfully inserted table: " + tbl_name); } conn.Close(); Conn.Close(); Console.WriteLine("Finished."); } catch (Exception ex) { Console.WriteLine("Something is wrong."); }
程式執行的時候貌似依然是一條一條的插入,時間上並不效率。一個5M的資料庫(不到100個表)跑了將近5個小時。而寫到文字檔案的話不到一秒鐘。。

插入表之前需要先建立表。如果不能事先獲得CREATE命令的話,自行建立的話可能會比較麻煩。

相關推薦

C#DataTable資料批量匯入SQLite

原目的:從一個老的SQLite裡讀出資料,存到DataTable裡,然後儲存到一個新的SQLite資料庫中。 需要引用System.Data.SQLite.dll try { SQLiteConnection Conn

C#txt的資料匯入excel,用逗號分隔

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

jdbc百萬資料批量匯入,流式讀取

Connection connReader = null; Connection connWrite = null; String url = "jdbc:mysql://XX:3306/XX?" + "user=XX&password=XX&

Dstream[Row] 資料批量匯入Mysql 並去重(大致為如果資料庫中有某行資料了,本次執行若有一行與資料庫中的那行相同,則不會再插入進去)

def Save2Mysql(stateDStream: DStream[Row]): Unit = { stateDStream.foreachRDD { rdd => { rdd.foreachPartition(partitionRecord

Excel檔案一鍵上傳並解析完成資料批量匯入資料庫

原來做檔案上傳的時候,都是有一個輸入框,點選上傳按鈕,先瀏覽檔案,選擇檔案後,把檔案的路徑儲存到form表單中,最後通過form表單提交到服務端。這樣的介面不是很美觀。為了使用者有更好地體驗(UE),現在的大多數系統都是採用一鍵檔案上傳,使用者點選上傳按鈕,選擇

JAVA Excel資料批量匯入到SQL資料庫

    今天剛好需要批量將Excel裡的資料匯入到SQL Server,本來打算用Genero寫的,發現官方驅動包找不到SQL Server 2012的驅動,我的天啊,無解!只好用JAVA來寫!JAVA通過載入JDBC驅動輕鬆搞定!除了引用sqljdbc4.jar 庫外,還

如何將Excel表格中的資料批量匯入到Oracle資料庫表中

工具選擇     資料庫 ORACLE11G     程式語言 JAVA 首先是使用JAVA語言編寫一個解析EXCEL檔案的小程式碼,這裡需要一個工具JXL.JAR,這是個JAR包,有了它,我們就可以輕鬆的把EXCEL檔案解析 如果要對EXCEL檔案進行操作,則需要對EXCE

excel資料批量匯入mongodb資料庫

       資料匯入資料庫的工作經常會遇到,這篇博文我們介紹一下linux系統下如何通過命令將excel中的資料批量匯入到非關係型資料庫mongodb中。        步驟一:將bigdata.x

專案案例 || 將Excel資料批量匯入到資料庫

你在工作中是否遇到這樣的問題?資料一般存放在Excel表中,逐條遷移到資料庫中太麻煩,而且很多時候企業的資料量都是以萬起步,單條匯入顯然不現實。那麼該如何解決呢? 我們今天就給大家介紹一個用途非常廣泛的功能:批量匯入,在很多系統中,這也是必須實現的功能。而且當Excel表結構越複雜

Excel 資料批量匯入到 mysql資料庫

工作中平時會遇到將 Excel資料批量匯入資料庫的情況。我是這樣做的 step1.  先將 excel 轉 json。 step2.  將轉換後的json拷貝到前端程式中,提交 json格式資料給後端;  後端迴圈遍歷資料進資料庫。

Foxmail的郵件匯入到Office Outlook

今天一同事說要把Foxmail裡的郵件都匯入到Office Outlook裡,於是問題就來了。 從Foxmail匯出的檔案.eml格式的,直接是不能匯入到Office Outlook裡。於是上網找了一下需要用Outlook Express中間轉換一下,他在電腦裡找了半天也沒

C#實現json物件資料批量插入資料庫

最近在做客戶的一個專案,其中有一個小地方是用JQgrid表格載入從介面讀出的資料,之後提供多選功能,最後再將選中的資料再匯入到另一個數據庫中。 熟悉JQgrid的同志們都知道,JQgrid獲取選中行的資料相當簡單,唯獨要注意的是,選中的資料是json物件格式的,需要傳到

C#將TextBox資料按行讀取到陣列中

TextBox多行輸入: 將屬性中Multiline設定為Truestring[] str = new string[TextBox1.Lines.Length];for (int i = 0; i < TextBox1.Lines.Length; i++){    s

DataTable資料批量寫入資料庫

最近在將excel中的檔案匯入到資料庫中,用程式進行編寫,由於資料量較大所以速度很慢,後來採用了SqlBulkCopy類,解決了速度的問題,我就insert語句,sqldataadapter.update(dataset,tablename);sqlbulkcopy.Wri

LINQ方式 DataTable資料 生成全新的DataTable

我們知道,從一個存在的DataTable 型別中選取的DataRow 是不能直接附加給另一個DataTable的例項的, 可以考慮用一下方式實現。 假設有一個DataTable 的例項 dt (它可以是一個屬於DataSet的)             IEnumerabl

SQLServer某個表的資料批量匯入到另一個表

類別一、如果兩張張表(匯出表和目標表)的欄位一致,並且希望插入全部資料,可以用這種方法: INSERT INTO 目標表 SELECT   * FROM 來源表; 例如,要將 articles 表插入到 newArticles 表中,則可以通過如下SQL語句實現: I

百萬條資料批量匯入

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.IO; using Sy

Hbase通過命令將資料批量匯入的方法

拋磚引玉: hbase建表: hbase(main):003:0> create 'people','0' 將提前準備好的資料上傳到hdfs: [hadoop@h71 ~]$ vi people.txt 1,jimmy,25,jiujinshan 2,tina,25

解決mapreduce無法將資料批量匯入hbase的問題

hadoop版本:hadoop-2.6.0-cdh5.5.2 hbase版本:hbase-1.0.0-cdh5.5.2 建立日誌表: import java.io.IOException; import org.apache.hadoop.conf.Configura

.NET Core使用NPOI將Excel中的資料批量匯入到MySQL

前言:   在之前的幾篇部落格中寫過.NET Core使用NPOI匯出Word和Excel的文章,今天把同樣我們日常開發中比較常用的使用Excel匯入資料到MySQL資料庫中的文章給安排上。與此同時還把NPOI-ExportWordAndExcel-ImportExcelData這個開源專案升級到了.NET