C# WPF - 将 SQLite 数据库复制到 Excel

本文关键字:复制 Excel 数据库 SQLite WPF | 更新日期: 2023-09-27 18:34:44

我目前正在运行一个C#项目,该项目处理大量数据并将其存储在SQLite数据库中。但是,我想将这些文件从数据库导出到一个简单的 excel 工作表中,例如创建一些文件,其中数据库中的每个表都是 excel 中的一个工作表,只是一个普通副本。

目前,我正在用.csv的流写器做同样的事情,它非常慢,因为我有大约 140000 个数据集。这意味着它需要将表作为一个整体复制或按块进行复制。

我没有找到任何代码片段如何使用 sqlite 在 c# 中执行此操作。你有什么想法,我怎么能做到这一点?

C# WPF - 将 SQLite 数据库复制到 Excel

我从来没有在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();
            }
        }
    }
}

希望如此,这将引导您走向正确的方向。