c# sqlite导出导入数据表 作为sql文件

csharp 复制代码
// 创建一个 SQLiteConnection 对象
using (var connection = new SQLiteConnection("Data Source=mydatabase.sqlite"))
{
    // 打开数据库连接
    connection.Open();

    // 查询所有表名
    var tableNames = new List<string>();
    var tablesCommand = new SQLiteCommand("SELECT name FROM sqlite_master WHERE type='table'", connection);
    using (var tablesReader = tablesCommand.ExecuteReader())
    {
        while (tablesReader.Read())
        {
            tableNames.Add(tablesReader.GetString(0));
        }
    }

    // 遍历所有表,生成导出 SQL
    var exportSql = new StringWriter();
    foreach (var tableName in tableNames)
    {
        // 查询表结构
        var schemaCommand = new SQLiteCommand($"PRAGMA table_info({tableName})", connection);
        var schemaReader = schemaCommand.ExecuteReader();

        // 生成 CREATE TABLE 语句
        exportSql.WriteLine($"-- Table: {tableName}");
        exportSql.Write("CREATE TABLE ");
        exportSql.Write(tableName);
        exportSql.Write(" (");
        bool firstColumn = true;
        while (schemaReader.Read())
        {
            string columnName = schemaReader.GetString(1);
            string columnType = schemaReader.GetString(2);
            bool notNull = !schemaReader.IsDBNull(3) && schemaReader.GetInt32(3) != 0;
            bool primaryKey = !schemaReader.IsDBNull(5) && schemaReader.GetInt32(5) != 0;

            if (!firstColumn)
            {
                exportSql.Write(",");
            }
            exportSql.Write(columnName);
            exportSql.Write(" ");
            exportSql.Write(columnType);
            if (notNull)
            {
                exportSql.Write(" NOT NULL");
            }
            if (primaryKey)
            {
                exportSql.Write(" PRIMARY KEY");
            }
            firstColumn = false;
        }
        exportSql.Write(");");
        exportSql.WriteLine();

        // 查询表数据
        var dataCommand = new SQLiteCommand($"SELECT * FROM {tableName}", connection);
        using (var dataReader = dataCommand.ExecuteReader())
        {
            // 生成 INSERT 语句
            while (dataReader.Read())
            {
                exportSql.Write($"INSERT INTO {tableName} VALUES (");
                bool firstValue = true;
                for (int i = 0; i < dataReader.FieldCount; i++)
                {
                    if (!firstValue)
                    {
                        exportSql.Write(",");
                    }
                    object value = dataReader.GetValue(i);
                    if (value == null)
                    {
                        exportSql.Write("NULL");
                    }
                    else if (value is string)
                    {
                        exportSql.Write($"'{value.ToString().Replace("'", "''")}'");
                    }
                    else if (value is DateTime)
                    {
                        exportSql.Write($"'{((DateTime)value).ToString("yyyy-MM-dd HH:mm:ss.fff")}'");
                    }
                    else
                    {
                        exportSql.Write(value.ToString());
                    }
                    firstValue = false;
                }
                exportSql.Write(");");
                exportSql.WriteLine();
            }
        }
        exportSql.WriteLine();
    }

    // 将导出 SQL 写入到文件
    File.WriteAllText("export.sql", exportSql.ToString());
}
csharp 复制代码
public void ImportSqlFile(string sqlFilePath, string databaseFilePath)
{
    // 读取 SQL 文件内容
    string sql = File.ReadAllText(sqlFilePath);

    // 创建一个新的 SQLiteConnection 对象
    using (var connection = new SQLiteConnection($"Data Source={databaseFilePath}"))
    {
        // 打开数据库连接
        connection.Open();

        // 创建一个 SQLiteCommand 对象,并执行 SQL 文件中的 SQL 语句
        using (var command = new SQLiteCommand(sql, connection))
        {
            command.ExecuteNonQuery();
        }
    }

    Console.WriteLine("SQL 文件导入成功!");
}
相关推荐
唐青枫2 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
掉头发的王富贵4 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
雨落倾城夏未凉5 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫6 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
兵慌码乱7 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
唐青枫7 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m6257 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户91721561902117 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
兵慌码乱8 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
小码编匠8 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net