【发布时间】:2020-07-22 13:04:48
【问题描述】:
我想解析一个 CSV 文件,将其存储在一个列表中,然后将该列表中的值插入到数据库中。这是我的代码示例。 我还在学习,所以如果不清楚,我会进一步解释。但想法是逐行解析 csv 文件,然后将每一行插入我的数据库中。提前谢谢你。
public class SKU : List<string[]>
{
public string SKU_ID { get; set; }
public string SKU_Name { get; set; }
public string Code { get; set; }
public string Product_Name { get; set; }
public string DistributionCenter_Name { get; set; }
internal static SKU ParseRow(string row)
{
var columns = row.Split(';');
return new SKU()
{
SKU_ID = columns[0],
SKU_Name = columns[1],
Code = columns[2],
Product_Name = columns[3],
DistributionCenter_Name = columns[4],
};
}
}
在脚本中,我将每一列命名为 csv 文件和我的数据库中的名称。
我的主要如下
class Programm
{
static void Main(string[] args)
{
var sku_info = ProcessCSV("skutest1.csv");
SqlConnection conn = new SqlConnection();
conn.ConnectionString = @"...";
foreach (var information in sku_info)
{
using SqlConnection connection = new SqlConnection(conn.ConnectionString);
string commandString = ("INSERT INTO SKU VALUES ('" + information.SKU_ID + " "+information.SKU_Name+" "+information.Code+" "+information.Product_Name+" "+information.DistributionCenter_Name+"')");
conn.Open();
SqlTransaction transaction = conn.BeginTransaction();
SqlCommand cmd = new SqlCommand(commandString, conn, transaction);
cmd.ExecuteNonQuery();
transaction.Commit();
}
Console.ReadKey();
}
private static List<SKU> ProcessCSV(string path)
{
return File.ReadAllLines("C:/.../skutest1.csv").Where(row => row.Length > 0).Select(SKU.ParseRow).ToList();
}
}
【问题讨论】:
-
您的
commandString大楼非常危险。请阅读stackoverflow.com/questions/14376473/…。 -
那么你的问题是什么?如果我不得不猜测这是关于您从
INSERT语句中得到的错误,因为您使用的是字符串连接(不正确),而不是参数,但我不应该猜测。 -
始终使用参数化 sql 并避免字符串连接向 sql 语句添加值。这可以缓解 SQL 注入漏洞并确保将值正确传递给语句。请参阅 How can I add user-supplied input to an SQL statement? 和 Exploits of a Mom。
-
@ZoharPeled 感谢您的文章,这将有很大帮助!
-
@Igor 非常感谢你!我仍然缺乏语法知识和编码的好方法,您的链接将有很大帮助!
标签: c# database list csv localdb