如何使用C#将1D数组中的每个元素插入SQL数据库中的新行

本文关键字:插入 元素 SQL 数据库 新行 1D 数组 何使用 | 更新日期: 2023-09-27 17:50:36

我有一个数组,其中包含要插入SQL数据库的文件路径列表。

string[] filePaths = Directory.GetFiles(@"C:'Test Folder");

我对建立和连接数据库很有信心,只是不知道如何获取每个元素并将其放置在数据库的新行中。

谢谢,Matt

如何使用C#将1D数组中的每个元素插入SQL数据库中的新行

这取决于您使用的技术(请注意,当插入大量行时,建议使用SqlBulkCopy(。

ADO.NET

foreach (var path in filePaths)
{
   var command = new SqlCommand("INSERT INTO mytable(col1) VALUES(@param1)", connection);
   command.Parameters.AddWithValue("@param1", path);
   command.ExecuteNonQuery();
}

LINQ to SQL

var projection = filePaths.Select(a => new MyTable() { Col1 = a });
myContext.InsertAllOnSubmit(projection);
myContext.SubmitChanges();

实体LINQ

foreach (var path in filePaths)
{
   myModel.MyTable.AddObject(new MyTable() { Col1 = path });
}
myModel.SaveChanges();
foreach(string fp in filePaths)
{
   InsertIntoDb(fp);
}
//Method
public void InsertIntoDb(string insert)
{
   SqlConnection con = //Setup DB connection
   SqlCommand command = new SqlCommand();
   command.Connection = con;
   command.CommandText = "Insert @insert into Table";
   command.Parameters.AddWithValue("@insert", insert);
   command.ExecuteNonQuery();
}

这遗漏了很多,但它应该为你指明正确的方向。从本质上讲,您需要设置连接,实例化一个SqlCommand对象,其中命令文本是要插入值的SQL文本(最好是存储过程或其他经过净化的方法来插入数据,以避免SQL注入(,然后调用ExecuteNonQuery((来插入实际数据。

最有效的方法是使用SqlBulkCopy

为了使用SqlBulkCopy ,您必须将数据投影到DataTable、DataRow[]等或IDataReader(效率更高,请参阅本讨论和示例(中