Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#将一维数组中的每个元素插入SQL数据库中的新行?_C#_Sql_Database_Arrays_Insert - Fatal编程技术网

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

如何使用C#将一维数组中的每个元素插入SQL数据库中的新行?,c#,sql,database,arrays,insert,C#,Sql,Database,Arrays,Insert,我有一个数组,其中包含要插入SQL数据库的文件路径列表 string[] filePaths = Directory.GetFiles(@"C:\Test Folder"); 我对设置和连接数据库很有信心,只是不知道如何获取每个元素并将其放置在数据库的新行中 string[] filePaths = Directory.GetFiles(@"C:\Test Folder"); 谢谢, 马特 这遗漏了很多,但它应该为您指出正确的方向。基本上,您需要设置连接,实例化一个SqlCommand对象,

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

string[] filePaths = Directory.GetFiles(@"C:\Test Folder");
我对设置和连接数据库很有信心,只是不知道如何获取每个元素并将其放置在数据库的新行中

string[] filePaths = Directory.GetFiles(@"C:\Test Folder");
谢谢, 马特

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


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

最有效的方法是使用


为了使用SqlBulkCopy,您必须将数据投影到DataTable、DataRow[]等中,或者(哪一种更有效-请参阅本讨论和示例),最有效的方法是使用


为了使用SqlBulkCopy,您必须将数据投影到DataTable、DataRow[]等中,或者(哪个更有效?请参阅本讨论和示例),这取决于您使用的技术(请注意,在插入大量行时,建议使用
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到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();

这取决于您使用的技术(请注意,在插入大量行时,建议使用
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到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();

这是一种方法,它可以工作,但若数组只有几千行,它将有性能问题。巨大的性能问题。对于相同的数据集,使用这样的实现可以区分0.38秒和7小时的查询。是的,这些数字是准确的,因为我们发现了艰难的道路!只需添加一个表达式,说明在处理大型数据集时应该使用SqLBulkCopy,并且您的答案没有达到标准。这是真的。我的假设是一个相当小的数据集。大型数据集需要不同的插入方法。SqlBulkInsert可能是这些方法中最好的。这是一种方法,它可以工作,但如果数组只有几千行,它将有性能问题。巨大的性能问题。对于相同的数据集,使用这样的实现可以区分0.38秒和7小时的查询。是的,这些数字是准确的,因为我们发现了艰难的道路!只需添加一个表达式,说明在处理大型数据集时应该使用SqLBulkCopy,并且您的答案没有达到标准。这是真的。我的假设是一个相当小的数据集。大型数据集需要不同的插入方法。SqlBulkInsert可能是这些方法中最好的。