簡體   English   中英

從SQLite導出到SQL Server

[英]Exporting from SQLite to SQL Server

是否有工具將SQLite數據庫遷移到SQL Server (結構和數據)?

SQLite確實有一個.dump選項可以在命令行運行。 雖然我更喜歡使用SQLite數據庫瀏覽器應用程序來管理SQLite數據庫。 您可以將結構和內容導出到幾乎可以讀取的.sql文件中。 文件>導出>數據庫到SQL文件。

我知道這是舊線程,但我認為這個解決方案也應該在這里。

  • 為SQLite安裝ODBC驅動程序
  • 運行odbcad32 for x64或C:\\ Windows \\ SysWOW64 \\ odbcad32.exe for x86
  • 創建SYSTEM DSN,在其中選擇SQLite3 ODBC Driver
  • 然后填寫數據庫名稱為filepath的表單到sqlite數據庫

然后在SQL Server中運行sysadmin

USE [master]
GO
EXEC sp_addlinkedserver 
   @server     = 'OldSQLite', -- connection name
   @srvproduct = '',          -- Can be blank but not NULL
   @provider   = 'MSDASQL', 
   @datasrc    = 'SQLiteDNSName' -- name of the system DSN connection 
GO

然后您可以像普通用戶一樣運行查詢

SELECT * INTO SQLServerDATA FROM openquery(SQLiteDNSName, 'select * from SQLiteData')

或者您可以使用像這樣的較大的表。

SQLite .dump命令將輸出數據庫的全部內容作為ASCII文本文件。 此文件采用標准SQL格式,因此可以導入任何SQL數據庫。 有關此頁面的更多詳細信息: sqlite3

sqlite-manager ,firefox附加組件:允許您在SQL腳本中導出SQLite數據庫。

數據庫>導出數據庫>導出到文件

(更正firefox 35 bugg有義務更正擴展代碼,如以下網頁所示: 如何修復可選的sqlite manager模塊工作

命令行

sqlite3 DB_name .dump > DB_name.sql

在SQL腳本中導出sqlite數據庫。

來自網址: http//doc.ubuntu-fr.org/sqlite

一個想法是做這樣的事情: - 在sql lite中查看squema並獲取CREATE TABLE命令。 - 在SQL SERVER中執行,解析sql - 為每行創建INSERT語句的旅行數據。 (也解析sql)

這段代碼是beta版,因為沒有檢測類型數據,也沒有使用@parameter和command對象,而是運行。

(您需要插入引用並安裝System.Data.SQLite;)

c#:在head cs中插入此代碼(或neccesari)

使用系統;

使用System.Collections.Generic;

使用System.Text;

使用System.Data;

使用System.Data.SqlClient;

使用System.Data.SQLite;

使用System.Threading;

使用System.Text.RegularExpressions;

使用System.IO;

使用log4net;

使用System.Net;

    public static Boolean SqLite2SqlServer(string sqlitePath, string connStringSqlServer)
    {
        String SqlInsert;
        int i;
        try
        {

            string sql = "select * from sqlite_master where type = 'table' and name like 'YouTable in SQL'";
            string password = null;
            string sql2run;
            string tabla;
            string sqliteConnString = CreateSQLiteConnectionString(sqlitePath, password);
            //sqliteConnString = "data source=C:\\pro\\testconverter\\Origen\\FACTUNETWEB.DB;page size=4096;useutf16encoding=True";

            using (SQLiteConnection sqconn = new SQLiteConnection(sqliteConnString))
            {



                sqconn.Open();

                SQLiteCommand command = new SQLiteCommand(sql, sqconn);
                SQLiteDataReader reader = command.ExecuteReader();

                SqlConnection conn = new SqlConnection(connStringSqlServer);
                conn.Open();
                while (reader.Read())
                {
                    //Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"]);
                    sql2run = "" + reader["sql"];
                    tabla = "" + reader["name"];

                    /*
                    sql2run = "Drop table " + tabla;
                    SqlCommand cmd = new SqlCommand(sql2run, conn);                       
                    cmd.ExecuteNonQuery();
                    */



                    sql2run = sql2run.Replace("COLLATE NOCASE", "");
                    sql2run = sql2run.Replace(" NUM", " TEXT");
                    SqlCommand cmd2 = new SqlCommand(sql2run, conn);
                    cmd2.ExecuteNonQuery();


                    // insertar los datos.
                    string sqlCmd = "Select *  From " + tabla;
                    SQLiteCommand cmd = new SQLiteCommand(sqlCmd, sqconn);
                    SQLiteDataReader rs = cmd.ExecuteReader();
                    String valor = "";
                    String Valores = "";
                    String Campos = "";
                    String Campo = "";
                    while (rs.Read())
                    {
                        SqlInsert = "INSERT INTO " + tabla;
                        Campos = "";
                        Valores = "";
                        for ( i = 0; i < rs.FieldCount ; i++)
                        {

                            //valor = "" + rs.GetString(i);
                            //valor = "" + rs.GetName(i);
                            Campo = "" + rs.GetName(i);
                            valor = "" + rs.GetValue(i);

                            if (Valores != "")
                            {
                                Valores = Valores + ',';
                                Campos = Campos + ',';
                            }
                            Valores = Valores + "'" + valor + "'";
                            Campos = Campos + Campo;
                        }
                        SqlInsert = SqlInsert + "(" + Campos + ") Values (" + Valores + ")";
                        SqlCommand cmdInsert = new SqlCommand(SqlInsert, conn);
                        cmdInsert.ExecuteNonQuery();


                    }


                }

                }
            return true;
        } //END TRY
        catch (Exception ex)
        {
            _log.Error("unexpected exception", ex);

            throw;

        } // catch
    }

對於Android。

adb root
adb shell
cd /data/com.xxx.package/databases/
sqlite3 db_name .dump >dump.sql

暫無
暫無

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

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