热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SqlBulkCopy快速插入数据到SqlServer数据库-mysql教程

向SQLServer中导入大量数量可以用bulkinsert,但是必须要求插入的文件在数据库机器上或者一个数据库可以访问的共享文件夹中(我不知道怎么设置共享文件夹,以使得SQLServer能访问到)SqlBulkCopy是.net中的一个类,提供了导入大量数据的功能。

向SQL Server中导入大量数量可以用bulk insert,但是必须要求 插入 的文件在 数据 库机器上或者一个 数据 库可以访问的共享文件夹中(我不知道怎么设置共享文件夹,以使得SQL Server能访问到) SqlBulkCopy 是.net中的一个类,提供了导入大量 数据 的功能。

向SQL Server中导入大量数量可以用bulk insert,但是必须要求插入的文件在数据库机器上或者一个数据库可以访问的共享文件夹中(我不知道怎么设置共享文件夹,以使得SQL Server能访问到)

SqlBulkCopy 是.net中的一个类,提供了导入大量数据的功能。

基本用法如下:

using (SqlBulkCopy bc = new SqlBulkCopy(sqlConn, SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.UseInternalTransaction, null))
{
     bc.BulkCopyTimeout = 10 * 60;
     bc.BatchSize = 10000;
     bc.DestinatiOnTableName= "dbo.Destination";
     bc.WriteToServer(reader); //reader 是一个继承自IDataReader的类的实例
}

自己可以写代码来实现继承自IDataReader的类。有n多成员要实现。。。

比如FieldCount, Read(), GetValue(int i), Close()等

下面是一个读文件的例子:

//返回记录的列数
        public int FieldCount  
        {
             get { return 3; }
        }

        //读记录,此方法会被自动调用
        public bool Read()
        {
            if (_Reader == null)
                _Reader = new StreamReader(_FilePath);

            string line = _Reader.ReadLine();
            
            if (line != null)
            {
                _CurrentQueryItem = GetRawData(line);
                _Count++;

                while (_CurrentQueryItem == null)//如果读出的是不满足条件的记录,则读下一条记录
                {
                    Read();
                }
                return true;
            }            
            return false;
        }

        //返回一条记录中第i 列(项)的值,此方法会被自动调用
    //SqlBulkCopy内部应该有一个循环,从0到FieldCount -1 ,再调用GetValue(int i)这个方法。我猜的。。。
        public object GetValue(int i)
        {
            if (_CurrentQueryItem == null)
                return null;

            switch (i)
            {
                //如果数据库中表的第一列是自增字段,则会忽略第一列,也就是说此方法被调用时,i只会从1开始,所以不需要case 0的情况。估计.net内部去取目的表的schema,自动判断哪些列是需要从外部导入的。有空再研究这个问题
                case 0:
                    return _CurrentQueryItem.Item1;
                case 1:
                    return _CurrentQueryItem.Item2;
                case 2:
                    return _CurrentQueryItem.Item3;
                default:
                    throw new IndexOutOfRangeException();
            }
        }

        //释放资源
        public void Close()
        {
            Dispose();
        }

        public void Dispose()
        {
            if (_Reader != null)
                _Reader.Close();
        }

有一些其他属性其方法需要自己实现,当然有的不实现也没关系。似乎重要的就以上几个方法了。
对照SqlDataRead,自己可以猜想出会用到哪些方法。

经过实验,一个文件如果一行一行插入数据库里,需要大约2分钟,如果用SqlBulkCopy 10秒左右就完成了。而且可以自己实现类来指定处理什么数据,也不用把文件放在数据库机器上了。不错。

忘说了,SqlBulkCopy里用到的connction对象只能是SqlConnection。SqlBulkCopy.WriteToServer (DataRow]) 和SqlBulkCopy.WriteToServer (DataTable) 都是可以的。

推荐阅读
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • 在 Asp.net 应用中,动态加载 DropDownList 控件的数据源是一项常见需求。本文探讨了如何高效地从数据库中获取数据,并实时更新下拉列表,确保用户界面始终与后台数据保持同步。通过使用 ADO.NET 和 LINQ to SQL 技术,开发者可以轻松实现这一功能,同时提高应用的性能和用户体验。文中还提供了代码示例和最佳实践,帮助开发者解决常见的数据绑定问题。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • SeMITechnologies正在使用矢量搜索引擎Weaviate构建的内容。SeMI的首席执行官兼联合创始人BobvanLuijt说,它是一种独特的AI优先数据库,使用机器学习 ... [详细]
  • 本文详细介绍了 Pentaho Kettle 中 RowMetaInterface.writeMeta 方法的使用,并提供了多个代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 通过在项目中引用 NuGet 包 `ExcelDataReader`,可以实现高效地读取和导入 Excel 文件中的数据。具体方法是在项目中执行 `Install-Package ExcelDataReader` 命令,然后通过定义一个 `LeadingIn` 方法并传入上传文件的路径来完成数据导入。该方法不仅简化了代码逻辑,还显著提升了数据处理的效率和可靠性。 ... [详细]
  • 在处理 GridView 中的行记录时,有时需要动态地添加或删除行,而无需对数据库中的实际数据进行任何更改。本文介绍了如何实现这一功能,确保操作仅限于前端展示层面,而不影响后端数据库的完整性。通过这种方法,用户可以在不修改数据库记录的情况下,灵活地管理 GridView 中的数据展示。 ... [详细]
  • 利用C#技术实现Word文档的动态生成与编辑
    本文通过一个简单的示例,介绍了如何使用C#语言实现Word文档的动态生成与编辑功能。文章详细阐述了在项目中引用Word动态库的方法,并通过具体代码示例展示了如何创建和操作Word表格。此内容旨在为初学者提供参考和学习资料,欢迎读者提出宝贵意见和建议。 ... [详细]
  • 在C#和ASP.NET开发中,TypeParse 是一个非常实用的类型解析扩展方法库,提供了简便的类型转换功能。例如,通过 `var int1 = "12".TryToInt();` 可以将字符串安全地转换为整数,如果转换失败则返回0。此外,还支持更多复杂的类型转换场景,如 `var int2 = "22x".TryToInt();` 和 `var int3 = "3.14".TryToInt();`,确保了代码的健壮性和易用性。 ... [详细]
  • c#中Excel数据的导入、导出
    **导出到Excel文件含完整路径含字段标题 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 1.方法一:采用OleDB读取EXCEL文件:把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:publicDa ... [详细]
author-avatar
淀死鈊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有