`
wangfu_02
  • 浏览: 71745 次
社区版块
存档分类
最新评论

.net使用SqlBulkCopy导入数据

    博客分类:
  • .net
阅读更多
.net2.0后ado.net提供了一个快速导入sqlserver的方法sqlbulkcopy.导入效率非常高.
包装了一个简单的sqlbulkcopy类,用于数据从datatable导入到sqlserver.代码如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;

namespace taihe.framework.tools.import
{
    public class SqlBulkCopy
    {
        private int timeout = 1800;
        private System.Data.SqlClient.SqlBulkCopy sqlBulkCopy = null;

        public SqlBulkCopy()
        {
        }

        public SqlBulkCopy(int timeout)
        {
            this.timeout = timeout;
        }

        public void WriteToDataBase(DataTable source, string tableName,bool useTransaction,string dataBaseConnString,bool clearTable)
        {
            //判断表是否存在
            taihe.framework.data.datalayer.SqlDataHelper dataHelper = new data.datalayer.SqlDataHelper(dataBaseConnString);
            dataHelper.IsConnString = true; //使用数据库连接字符串创建sqlserver操作对象
            string sql = "select * from sys.objects where type='U' and name='" + tableName + "'";
            DataTable dt = dataHelper.ExecuteDataSet(sql).Tables[0];
            if (dt.Rows.Count > 0)
            {
                if (clearTable == true)
                {
                    sql = "drop table " + tableName + "";   //清除已存在的表
                }
                else
                {
                    throw new Exception("要创建的表已存在");
                }
            }
            this.CreateTable(dataHelper, source.Columns, tableName);
            sqlBulkCopy = new System.Data.SqlClient.SqlBulkCopy(dataBaseConnString);
            if (useTransaction == true)
            {
                sqlBulkCopy = new System.Data.SqlClient.SqlBulkCopy(dataBaseConnString, SqlBulkCopyOptions.UseInternalTransaction); //导入的数据在一个事务中
            }
            sqlBulkCopy.DestinationTableName = tableName;
            foreach (DataColumn c in source.Columns)
            {
                sqlBulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName);
            }
            sqlBulkCopy.BulkCopyTimeout = this.timeout;  //超时时间
            sqlBulkCopy.BatchSize = 3000;  //每次传输3000行
            sqlBulkCopy.WriteToServer(source);
        }

        public void CreateTable(taihe.framework.data.datalayer.SqlDataHelper dataHelper, System.Data.DataColumnCollection columns,string tableName)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("create table [" + tableName + "] (autoId  int identity(1,1),");
            foreach (DataColumn column in columns)
            {
                sb.Append(" [" + column.ColumnName + "] " + this.GetTableColumnType(column.DataType) + ",");
            }
            string sql = sb.ToString();
            sql = sql.TrimEnd(',');
            sql += ")";
            dataHelper.ExecuteNonQuery(sql);
        }

        private string GetTableColumnType(System.Type type)
        {
            string result = "varchar(255)";
            string sDbType = type.ToString();
            switch (sDbType)
            {
                case "System.String":
                    break;
                case "System.Int16":
                    result = "int";
                    break;
                case "System.Int32":
                    result = "int";
                    break;
                case "System.Int64":
                    result = "float";
                    break;
                case "System.Decimal":
                    result="decimal(18,4)";
                    break;
                case "System.Double":
                    result = "decimal(18,4)";
                    break;
                case "System.DateTime":
                    result = "datetime";
                    break;
                default:
                    break;
            }
            return result;
        }
    }
}
分享到:
评论

相关推荐

    .SqlBulkCopy.Extension第三方批量复制插入sqlServer数据库的dll程序集(支持批量数据合并插入)

    Z.SqlBulkCopy.Extension第三...使用时直接按照.net中sqlbulkcopy的使用方法调用执行就可以,很方便,没有什么特别的。所以,这是z项目人员,把整个库称为Extension扩展库的原因。 少赚点积分。相互支持。zip压缩文件。

    asp.net Excel数据导入到数据库

    在ASP.NET中,将Excel数据导入到数据库是一个常见的任务,特别是在处理大量结构化数据时。以下是一些关于这个主题的关键知识点: 1. **文件读取**:首先,你需要使用一个库来读取Excel文件。在.NET框架中,可以使用...

    asp.net 使用SqlBulkCopy极速插入数据到 SQL Server

    在讨论 *** 使用 SqlBulkCopy 高效插入数据到 SQL Server 的相关知识点之前,首先需要了解传统的数据插入方法与 SqlBulkCopy 的性能差异。在给定的文件描述中,提到了一个测试结果,指出使用 SqlBulkCopy 插入数据的...

    .net用excel导入sqlserver

    4. **数据导入过程**: 通常,从Excel导入数据到SQL Server涉及以下步骤: - 打开Excel文件并读取数据。 - 创建SQL Server数据库连接。 - 构建INSERT或 Bulk Copy SQL语句,用于将Excel数据插入到数据库中。如果...

    Asp.Net实现Excel导入SQL Server

    为了提高性能,可以使用SqlBulkCopy类一次性将大量数据插入到SQL Server表中,而不是逐行插入。 8. **异常处理**: 在代码中加入适当的try-catch块,捕获可能出现的错误,如文件不存在、数据库连接失败、数据格式...

    Asp.net中Excel导入

    在Asp.net开发环境中,Excel数据的导入是一项常见的任务,特别是在需要从电子表格批量导入数据到数据库时。这里我们将深入探讨如何在Asp.net中实现Excel数据的导入,并将其存储到SQL Server 2005数据库中。 首先,...

    asp.net(c#)excel数据导入Sql2005

    在ASP.NET(C#)开发中,经常需要处理从Excel文件导入数据到SQL Server 2005这样的任务。这个过程涉及到多个技术层面,包括文件读取、数据处理和数据库交互。下面将详细介绍这个过程中的关键知识点。 首先,我们需要...

    Sqlserver批量导入数据的示例(SqlBulkCopy)

    `附件1:SqlBurkCopy.zip`可能包含了一个使用`SqlBulkCopy`的完整示例项目,包括如何创建数据源、配置`SqlBulkCopy`对象以及处理导入过程。解压并运行此项目,你可以看到`SqlBulkCopy`的实际效果,从而更好地理解和...

    asp.net的Execl导入sql源代码

    ASP.NET是一种基于.NET Framework...总结来说,这个ASP.NET项目实现了从Excel文件导入数据到SQL Server 2008的功能,为Web应用的数据管理提供了便利。对于学习和开发类似的解决方案,了解上述步骤和技巧是非常重要的。

    C#数据库教程6-ADO.NET用户数据导入数据库的几种类型

    在C#中,我们可以使用ADO.NET的SqlBulkCopy类来高效地批量导入大量文本数据。首先,我们需要读取文本文件内容,将其转换为DataTable或List对象,然后通过SqlBulkCopy实例配置目标表信息并执行导入操作。例如: ```...

    .net Excel导入经典实例

    在.NET开发中,有时我们需要处理Excel数据,例如从Excel文件导入数据到数据库。这个经典实例展示了如何使用.NET框架实现这一功能。以下是一些关键知识点: 1. **命名空间引用**: - `System`: .NET Framework的...

    asp.net Excel导入SQLserver源码

    在这个特定的项目中,"asp.net Excel导入SQLserver源码" 提供了一个功能,即从Excel文件批量导入数据到SQL Server 2000数据库中。这是一个常见的需求,特别是在数据迁移、数据处理或数据分析场景中。 在BS(Browser...

    ASP.NET将EXCEL导入SQL SERVER数据库的代码

    通过以上步骤,你可以实现ASP.NET中从Excel文件导入数据到SQL Server数据库的功能。这不仅适用于简单的数据导入,还可以根据需求进行更复杂的转换和验证,以满足不同的业务场景。记住,始终确保代码的健壮性和安全性...

    .net excel导入到数据库

    通过以上步骤,我们可以实现从Excel文件导入数据到SQL Server 2005的功能。这个过程涉及文件操作、数据读取、数据库连接、SQL操作以及Web开发等多个方面,对于.NET开发者来说,这些都是必备的技能。在实际项目中,...

    asp.net把execl文件导入数据库

    在ASP.NET开发中,将Excel文件导入数据库是一项常见的任务,特别是在数据处理和分析场景下。以下是对这个主题的详细说明: 1. **Excel文件读取**:首先,我们需要使用一个库来读取Excel文件。在.NET框架中,可以...

    SqlBulkCopy批量插入数据(实例)

    4. 将数据源连接到SqlBulkCopy:例如,从DataTable导入数据,使用`bulkCopy.WriteToServer(dataTable);` 5. 最后,记得关闭SqlBulkCopy和数据库连接。 在性能优化方面,有以下几点需要注意: 1. 减少数据库交互:...

    C#使用SqlBulkCopy批量复制数据到数据表

    总结,C#中的`SqlBulkCopy`类提供了高效、灵活的方式来批量导入数据到SQL Server数据库。通过正确配置映射、事务和性能选项,可以实现快速且可靠的数据迁移。在处理大量数据时,使用此工具可以显著提高应用程序的...

    asp.net导入导出excel表,导入到sql数据库

    本篇将详细阐述如何使用ASP.NET结合DataTable和DataGrid实现Excel数据的导出,以及如何将Excel数据高效地导入到SQL数据库。 首先,我们来看导出Excel的过程。在ASP.NET中,有两种主要的导出方法:使用DataTable和...

    Asp.net 操作Excel导入示例

    4. 导入数据:在导入数据到数据库之前,可能需要进行数据清洗和验证。例如,检查数据类型、格式、约束等。完成后,可以使用SqlBulkCopy类将DataTable中的数据批量导入SQL Server数据库。 5. 错误处理和资源释放:在...

Global site tag (gtag.js) - Google Analytics