如何用C#读取文本文件数据并写入SQL数据库产品表?
需求描述
我有一份按特定格式组织的产品数据文本,需要将其存入SQL产品表,使用C#实现。具体细节如下:
数据格式说明
文本文件格式示例:
#Softdrinks Cola 2 Sprote 3 Fant 4 Redbull 2 #Pide-Lahmacun Pide Mozarella 12 Pide Hackfleisch 12 Pide Feta-Hackfleisch 14 Pide Spinat 13 Pide Spinat-Ei 14
格式规则
#开头的内容代表产品分类名称(如Softdrinks、Pide-Lahmacun)- 分类后的每一组“名称 价格”(如
Cola 2)表示:产品名称为Cola,价格为2
实现目标
将上述格式的文本数据解析后,存入SQL产品表,使用C#和SQL技术完成。求具体实现方法。
实现方案
步骤1:定义数据模型
首先,创建C#类来映射产品数据:
public class Product { public string Category { get; set; } public string Name { get; set; } public decimal Price { get; set; } }
步骤2:解析文本数据
编写解析逻辑,提取分类和产品信息:
public static List<Product> ParseProductText(string inputText) { var products = new List<Product>(); var parts = inputText.Split(new[] { '#' }, StringSplitOptions.RemoveEmptyEntries); foreach (var part in parts) { var items = part.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (items.Length < 3) continue; // 至少需要分类名 + 一组产品数据 string category = items[0]; // 从第1个元素开始,每两个元素为一组产品(名称+价格) for (int i = 1; i < items.Length; i += 2) { if (i + 1 >= items.Length) break; // 防止数组越界 if (decimal.TryParse(items[i+1], out decimal price)) { products.Add(new Product { Category = category, Name = items[i], Price = price }); } } } return products; }
步骤3:SQL表设计
创建产品表的SQL脚本:
CREATE TABLE Products ( Id INT IDENTITY(1,1) PRIMARY KEY, Category NVARCHAR(50) NOT NULL, ProductName NVARCHAR(100) NOT NULL, Price DECIMAL(10,2) NOT NULL );
步骤4:批量插入数据到SQL
使用ADO.NET实现数据插入(参数化查询防止SQL注入):
public static void InsertProducts(List<Product> products, string connectionString) { using (var conn = new SqlConnection(connectionString)) { conn.Open(); string insertQuery = @"INSERT INTO Products (Category, ProductName, Price) VALUES (@Category, @ProductName, @Price)"; foreach (var product in products) { using (var cmd = new SqlCommand(insertQuery, conn)) { cmd.Parameters.AddWithValue("@Category", product.Category); cmd.Parameters.AddWithValue("@ProductName", product.Name); cmd.Parameters.AddWithValue("@Price", product.Price); cmd.ExecuteNonQuery(); } } } }
步骤5:整合调用示例
public static void Main() { string inputText = "#Softdrinks Cola 2 Sprote 3 Fant 4 Redbull 2 #Pide-Lahmacun Pide Mozarella 12 Pide Hackfleisch 12 Pide Feta-Hackfleisch 14 Pide Spinat 13 Pide Spinat-Ei 14"; string connectionString = "Your_SQL_Connection_String"; // 替换为实际连接字符串 var products = ParseProductText(inputText); InsertProducts(products, connectionString); Console.WriteLine("数据插入完成!"); }
关键注意事项
- 建议添加异常处理逻辑,捕获解析错误(如价格格式无效、文本结构异常)
- 若处理大量数据,使用
SqlBulkCopy替代逐行插入可大幅提升性能 - 始终坚持参数化查询,杜绝SQL注入风险
内容的提问来源于stack exchange,提问作者Sreedham Biswas
相关产品推荐
相关产品推荐

