簡體   English   中英

C# WPF - 將 SQLite 數據庫復制到 Excel

[英]C# WPF - Copy SQLite Database to Excel

我目前正在運行一個 C# 項目,該項目處理大量數據並將其存儲在 SQLite 數據庫中。 但是我想將這些文件從數據庫導出到一個簡單的excel表,例如創建一些文件,其中數據庫中的每個表都是excel中的一個表,只是一個普通副本。

目前我正在用 .csv streamwriter 做同樣的事情,它非常慢,因為我有 140000 個數據集。 這意味着它需要將表作為一個整體復制或逐塊復制。

我沒有找到任何代碼片段如何在 c# 中使用 sqlite 執行此操作。 你有什么想法,我怎么能做到這一點?

我從來沒有在 SQLite 中這樣做過,我也認為直接輸出總是更好,但我對此很好奇。

所以我寫了這個嘗試:

using System;
using System.Data.SQLite;
using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelSqlite
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            string cs = "URI=file:test.db";
            string data = String.Empty;

            int i = 0;
            int j = 0;

            using (SQLiteConnection con = new SQLiteConnection(cs))
            {
                con.Open();

                string stm = "SELECT * FROM Contacts";

                using (SQLiteCommand cmd = new SQLiteCommand(stm, con))
                {
                    using (SQLiteDataReader rdr = cmd.ExecuteReader())
                    {
                        while (rdr.Read()) // Reading Rows
                        {
                            for (j = 0; j <= rdr.FieldCount - 1; j++) // Looping throw colums
                            {
                                data = rdr.GetValue(j).ToString();
                                xlWorkSheet.Cells[i + 1, j + 1] = data;
                            }
                            i++;
                        }
                    }
                }
                con.Close();
            }

            xlWorkBook.SaveAs("sqliteToExcel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
        }

        private static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
            }
            finally
            {
                GC.Collect();
            }
        }
    }
}

希望如此,這將引導您走向正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM