当前位置:编程学习 > C#/ASP.NET >>

批量插入数据库,用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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,