# CsvToSqlite **Repository Path**: ttkea/csv-to-sqlite ## Basic Information - **Project Name**: CsvToSqlite - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-19 - **Last Updated**: 2025-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README CsvToSqlite 是一个用于将 CSV 文件中的数据导入到 SQLite 数据库的 .NET 库。它提供了简单易用的接口,允许用户配置 CSV 文件的格式、列映射以及目标表信息,从而实现高效的数据导入。 ## 功能特性 - 灵活的 CSV 格式配置:支持自定义分隔符、是否包含表头以及文件编码。 - 列映射功能:允许用户指定 CSV 文件列与 SQLite 数据库列之间的映射关系。 - 自动创建表:在导入数据时,如果目标表不存在,会自动创建相应的表。 - 批量导入:采用批量导入的方式,提高数据导入的效率。 - 错误处理和结果输出:提供详细的错误信息和处理结果输出。 ## 安装 目前,你可以通过引用本地 DLL 文件的方式使用该库。在 Visual Studio 中,右键点击项目,选择 “添加” -> “引用”,然后浏览并选择 CsvToSqlite.dll 文件。 ## 使用示例 以下是一个简单的示例,展示了如何使用 CsvToSqlite 库将 CSV 文件中的数据导入到 SQLite 数据库中: ```csharp using CsvToSqlite; using System; using System.Collections.Generic; using System.Threading.Tasks; class Program { static async Task Main() { // 创建一个实现 IProcessingOutput 接口的类实例 var output = new ConsoleOutput(); // 假设 ConsoleOutput 实现了 IProcessingOutput 接口 // 创建 CsvDataImporter 实例 var importer = new CsvDataImporter(output); // 配置 CSV 文件格式 importer.ConfigureCsvFormat(',', true, "utf-8"); // 设置列映射 var columnMappings = new Dictionary { { "CsvColumn1", "DbColumn1" }, { "CsvColumn2", "DbColumn2" } }; importer.SetColumnMappings(columnMappings); // 设置目标表信息 importer.SetTargetTable("YourTableName", "YourPrimaryKey"); // 导入数据 var csvFilePath = "path/to/your/csv/file.csv"; var dbFilePath = "path/to/your/sqlite/database.db"; var importedCount = await importer.ImportAsync(csvFilePath, dbFilePath); Console.WriteLine($"成功导入 {importedCount} 条记录。"); } } // 实现 IProcessingOutput 接口的类 class ConsoleOutput : IProcessingOutput { public void OutputResult(ProcessingOutputDto outputDto) { if (outputDto.IsSuccess) { Console.WriteLine($"处理成功,导入了 {outputDto.ProcessedRecordCount} 条记录。"); if (outputDto.AdditionalInfo.ContainsKey("Message")) { Console.WriteLine(outputDto.AdditionalInfo["Message"]); } } else { Console.WriteLine($"处理失败: {outputDto.ErrorMessage}"); if (outputDto.AdditionalInfo.ContainsKey("StackTrace")) { Console.WriteLine(outputDto.AdditionalInfo["StackTrace"]); } } } } ``` ## 接口和类说明 - `ICsvDataImporter` 接口:定义了 CSV 数据导入的主要方法: - `ConfigureCsvFormat(char delimiter = ',', bool hasHeader = true, string encoding = "utf-8")`:配置 CSV 文件的格式。 - `SetColumnMappings(Dictionary columnMappings)`:设置 CSV 列与数据库列之间的映射关系。 - `SetTargetTable(string tableName, string primaryKey)`:设置目标表的名称和主键列名。 - `ImportAsync(string csvFilePath, string dbFilePath)`:异步导入 CSV 文件中的数据到 SQLite 数据库,并返回导入的记录数。 - `ProcessingOutputDto` 类:用于存储处理结果的信息,包括处理是否成功、错误信息、处理的记录数以及其他额外信息。 - `IProcessingOutput` 接口:定义了输出处理结果的方法 `OutputResult(ProcessingOutputDto outputDto)`,用户可以实现该接口来自定义处理结果的输出方式。 - `CsvDataImporter` 类:实现了 `ICsvDataImporter` 接口,提供了具体的 CSV 数据导入功能。 ## 注意事项 - 确保 CSV 文件和 SQLite 数据库文件的路径正确,并且程序有足够的权限访问这些文件。 - 在设置列映射时,确保 CSV 文件中的列名与映射字典中的键一致。 - 当处理大量数据时,批量导入的方式可以显著提高性能,但需要根据实际情况调整批量大小。 ## 贡献和反馈 如果你在使用过程中遇到问题或有任何建议,欢迎在项目的 GitHub 仓库中提交 Issues 或 Pull Requests。我们将竭诚为你提供帮助。