批量插入数据库,用sqlDataAdapter.update快还是oledbDataAdapter.update快
在C#中,批量插入大数据量,用sqlDataAdapter.update快还是oledbDataAdapter.update快?程序架构怎么写?
数据库用sqlserver2000,每天数据大概1000万条 --------------------编程问答-------------------- Sql数据库 肯定是 sqlDataAdapter.update
但是我想 直接用 存储过程 更快了。。。
--------------------编程问答-------------------- 每天数据大概1000万条,还能用sql2000?!~ --------------------编程问答-------------------- 哪个快,我不敢确定...
但由于sqlserver也是MS的,所以VS对它的兼容性会更好...
如果你是Sqlserver数据库,当然应该选择SqlClient,(System.Data.SqlClient),里面就有你要用的SqlDataAdapter... --------------------编程问答-------------------- 直接用 存储过程 --------------------编程问答-------------------- 只是一个调用,应该很快的 --------------------编程问答-------------------- TO:数据库用sqlserver2000,每天数据大概1000万条
你们也是采集的数据吗?那对这些数据的处理流程大概是什么样的呢?
以前我们做过类似的事,一个采集服务,采集数据,先写到文本文件中,数据量一天可能还不止1000万条...我们采用的是oracle数据库,对于数据的处理是,采集服务先将数据写入文本文件,另开一个线程监视文件所存的目录,看当前是否有要导入的数据,有的话,调用一个bat文件,执行一个批处理(用的是Oracle的SqlLoader),将数据插入数据库,效率还挺高的.. --------------------编程问答-------------------- up --------------------编程问答-------------------- 用那个应该是没有太大差别,不过我的话用sqlDataReader --------------------编程问答-------------------- sqlDataAdapter快,因为它是针对专用数据库的,比普通的桥要快很多的。 --------------------编程问答-------------------- sql server 用BCP,将之写出存贮过程,然后再用程序调用,我以前做过的和
liujia_0421(SnowLover) ( ) 信誉:100
差不多,一样是文本文件,数据量也是这么大,只是数据库不同而已 --------------------编程问答-------------------- 直接用 存储过程 怎么写?
是一条一条记录插吗? --------------------编程问答-------------------- 你是采集一条数据就插入一次库吗? --------------------编程问答-------------------- liujia_0421(SnowLover)
我现在是这样一条条插入数据库的,我想问,能不能批量插入,比如1000条,我做一次存储过程 --------------------编程问答-------------------- 一条条插入效率上确实比较低,你说批量插入1000条,那你采集的这1000条是存在什么地方呢?
内存中还是什么? --------------------编程问答-------------------- 我原来是用内存表dataTable,保存在内存表中,等有1000条数据时,
sqlDataAdapter.update(dataTable)
我不知道用存储过程怎么写? --------------------编程问答-------------------- --------------------编程问答-------------------- 问速度哪个快?主要看你的角度了。
比如:根据你的反馈使用 sql server 仅仅比较谁快,当然是 sqlDataAdapter 了。
不过根据你的情况,上面的兄弟都已经给出其他的方案了,都不错,可以考虑一下。
记得曾经看 sql server 的联机帮助时,提到过大量数据操作时,最好采用 bcp 或则 SqlBulkCopy类。性能都能好许多。一条一条的写数据,估计机器会当掉的。
【MSDN 的资料】
SqlBulkCopy:
Lets you efficiently bulk load a SQL Server table with data from another source.
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString = GetConnectionString();
// Open a sourceConnection to the AdventureWorks database.
using (SqlConnection sourceConnection =
new SqlConnection(connectionString))
{
sourceConnection.Open();
// Perform an initial count on the destination table.
SqlCommand commandRowCount = new SqlCommand(
"SELECT COUNT(*) FROM " +
"dbo.BulkCopyDemoMatchingColumns;",
sourceConnection);
long countStart = System.Convert.ToInt32(
commandRowCount.ExecuteScalar());
Console.WriteLine("Starting row count = {0}", countStart);
// Get data from the source table as a SqlDataReader.
SqlCommand commandSourceData = new SqlCommand(
"SELECT ProductID, Name, " +
"ProductNumber " +
"FROM Production.Product;", sourceConnection);
SqlDataReader reader =
commandSourceData.ExecuteReader();
// Open the destination connection. In the real world you would
// not use SqlBulkCopy to move data from one table to the other
// in the same database. This is for demonstration purposes only.
using (SqlConnection destinationConnection =
new SqlConnection(connectionString))
{
destinationConnection.Open();
// Set up the bulk copy object.
// Note that the column positions in the source
// data reader match the column positions in
// the destination table so there is no need to
// map columns.
using (SqlBulkCopy bulkCopy =
new SqlBulkCopy(destinationConnection))
{
bulkCopy.DestinationTableName =
"dbo.BulkCopyDemoMatchingColumns";
try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(reader);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
// Close the SqlDataReader. The SqlBulkCopy
// object is automatically closed at the end
// of the using block.
reader.Close();
}
}
// Perform a final count on the destination
// table to see how many rows were added.
long countEnd = System.Convert.ToInt32(
commandRowCount.ExecuteScalar());
Console.WriteLine("Ending row count = {0}", countEnd);
Console.WriteLine("{0} rows were added.", countEnd - countStart);
Console.WriteLine("Press Enter to finish.");
Console.ReadLine();
}
}
}
private static string GetConnectionString()
// To avoid storing the sourceConnection string in your code,
// you can retrieve it from a configuration file.
{
return "Data Source=(local); " +
" Integrated Security=true;" +
"Initial Catalog=AdventureWorks;";
}
}
补充:.NET技术 , C#