如何使用C#将一维数组中的每个元素插入SQL数据库中的新行?
我有一个数组,其中包含要插入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对象,
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可能是这些方法中最好的。