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 文件导入成功!");
}
相关推荐
小羊没烦恼!8 小时前
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
java·开发语言·前端·数据库·算法·c#
格数致用9 小时前
04- 电子表格数据持久化与SQLite数据库交互实战
sqlite·电子表格
UIU11411 小时前
头文件可以防什么错?运用头文件做声明
c++·学习·c#
2501_9336707913 小时前
2027届数学与应用数学转经营分析:SQL、财务指标与业务指标补齐路线
数据库·sql·数学建模
鑫 源17 小时前
C#源码开源, 获取macOS 电池数据,包括iOS (xamarin开发)
c#·.net·xamarin
余槐i17 小时前
WAL 下写并发仍是 1:SQLite 单写者模型实测与绕开方案
数据库·python·性能优化·sqlite·wal
阳光九叶草LXGZXJ1 天前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
爱吃奥利奥_wen1 天前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
YIAN1 天前
实战|用 DeepSeek + SQLite 从零搭建轻量 Text2SQL 查询助手
后端·sqlite·deepseek
阳光九叶草LXGZXJ1 天前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习