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 文件导入成功!");
}
相关推荐
江沉晚呤时3 小时前
在 C# 中调用 Python 脚本:实现跨语言功能集成
python·microsoft·c#·.net·.netcore·.net core
Oberon4 小时前
Avalonia硬配.NET Framework 4.8
c#·.net·avalonia·.net framework
喵叔哟6 小时前
3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
c#·.netcore
Kay_Liang9 小时前
MySQL SQL语句精要:DDL、DML与DCL的深度探究
开发语言·数据库·sql·mysql·database
钢铁男儿9 小时前
C# 接口(接口可以继承接口)
java·算法·c#
LuckyLay9 小时前
1.1.5 模块与包——AI教你学Django
python·django·sqlite
float_六七11 小时前
SQL预编译:安全高效数据库操作的关键
数据库·sql·安全
写代码也要符合基本法12 小时前
Oracle SQL - 使用行转列PIVOT减少表重复扫描(实例)
数据库·sql·oracle
小码编匠16 小时前
C# 的西门子数控系统 OPCUA 数据采集开发从零入门
后端·数据分析·c#
孜然卷k16 小时前
C#项目 在Vue/React前端项目中 使用使用wkeWebBrowser引用并且内部使用iframe网页外链 页面部分白屏
前端·vue.js·react.js·c#