代码之家  ›  专栏  ›  技术社区  ›  DerBenutzer

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

  •  4
  • DerBenutzer  · 技术社区  · 9 年前

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

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

    我没有找到用sqlite在c#中实现这一点的任何代码片段。你有什么想法吗,我怎么做?

    1 回复  |  直到 4 年前
        1
  •  3
  •   Smartis has left SO again    9 年前

    我从未在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();
                }
            }
        }
    }
    

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