You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:14:31