`
wsql
  • 浏览: 12064599 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

c#中高效的excel导入sqlserver的方法

阅读更多

将oledb读取的excel数据快速插入的sqlserver中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒左右,而真正的导入过程只需要4.5秒。


using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//测试,将excel中的sheet1导入到sqlserver中
string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master";
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
TransferData(fd.FileName, "sheet1", connString);
}
}

public void TransferData(string excelFile, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);

//如果目标表不存在则创建
string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);
foreach (System.Data.DataColumn c in ds.Tables[0].Columns)
{
strSql += string.Format("[{0}] varchar(255),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")";

using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//用bcp导入数据
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 100;//每次传输的行数
bcp.NotifyAfter = 100;//进度提示的行数
bcp.DestinationTableName = sheetName;//目标表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}

}

//进度显示
void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)
{
this.Text = e.RowsCopied.ToString();
this.Update();
}


}
}

上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。

获取excel结构的方法可以参考我先前的文章

http://blog.csdn.net/jinjazz/archive/2008/05/13/2441635.aspx

分享到:
评论

相关推荐

    客户端将Excel导入SQL Server C#源码下载

    6. **BULK INSERT或OPENROWSET**:在SQL Server中,有两种常见的方法从文件导入大量数据:BULK INSERT语句和使用OPENROWSET函数。BULK INSERT适用于大文件,而OPENROWSET可以直接将Excel文件视为一个虚拟表进行查询...

    Excel导入SQLserver源码

    Excel导入SQLserver源码 Excel是一种非常灵活的电子表格软件,用它可以存储各种数据,本节将对如何将Excel导入SQL Server2000数据库进行详细介绍。 开发环境:NET2.0 开发工具:vs2005 开发语言:c# 数据库:server...

    C#将Excel导入Sql Server

    一个C#类 将EXCEL批量导入sql

    Excel导入SQLserver源码_excel2sql.zip

    因此,有了"Excel导入SQLserver源码_excel2sql.zip"这样的工具或代码,可以极大地提高工作效率。 这个压缩包文件"Excel导入SQLserver源码_excel2sql.zip"很可能包含了一个程序或脚本,用于自动化从Excel文件批量...

    excel导入sql server数据库源码

    在IT行业中,数据管理和操作是至关重要的任务,尤其是在企业级应用中。...以上就是关于“Excel导入SQL Server数据库源码”的主要知识点,涵盖了数据迁移的多种方式以及编程实现的细节,希望能对你的工作提供帮助。

    关于C# winform从EXCEL导入到SQL库

    #### 示例:从Excel导入数据到SQL Server ```csharp public static void ReadXlsToSql(string excelColumn) { try { string filePath = ""; string tableName = ""; filePath = SetOpenFileAtt(); tableName =...

    C#从excel导入数据到sql server

    本项目标题为“C#从excel导入数据到sql server”,它提供了一个使用C#编程语言解决此类问题的解决方案。下面我们将深入探讨这个话题,了解如何通过C#实现Excel数据到SQL Server的导入。 1. C#编程语言:C#是一种...

    C# excel 数据导入到sqlserver

    总结,通过C#,我们可以利用不同的库和方法将Excel数据高效地导入到SQL Server,实现数据的整理和管理。这个过程涉及到文件读取、数据库操作、数据类型转换等多个方面的知识,对于提升IT专业技能有着重要作用。

    c# EXCEL 数据导入SQL Server数据库(自动创建表)

    最近在做个小东西的时候用到的,网上有很多但大多是文档,所以自己照着改了改,开发环境:vs2013 excel版本:office excel 2013,可能写的比较糙,有什么有问题的地方希望能够指出来,共同进步。

    C#将Excel数据导入到SQL server数据库

    综上所述,C#将Excel数据导入SQL Server数据库涉及到文件读取、数据转换和数据库操作等技能。通过选择合适的库和优化操作,可以高效地完成这一任务。在实际开发中,还需要考虑到错误处理、性能优化以及数据一致性等...

    c#中高效的excel导入sqlserver的方法.pdf

    在C#中,高效地将Excel数据导入到SQL Server数据库是一项常见的任务,特别是在处理大量数据时,速度和准确性显得尤为重要。传统的做法是通过循环遍历Excel数据并逐条插入SQL Server,这种方法不仅耗时,还可能导致...

    Excel导入SQLServer数据库工具(含源码)

    使用Asp.Net开发,用于导入Excel文件到SQLServer,支持配置导入字段。支持主键为Int的外键。 两种方式:1、先导入Excel再配置对应关系 2、先配置对应关系在导入

    Excel导入SQLServer工具

    标题中的“Excel导入SQLServer工具”是一个专门设计用于将Excel数据批量导入到SQL Server数据库的应用程序。这个工具是由Asp.Net技术开发的,这表明它是一个基于Web的平台,能够处理用户通过网络提交的Excel文件。 ...

    C#winform导入excel到SQL Server

    在这个例子中,我们首先打开Excel文件,读取第一张工作表的数据,将其存储在DataTable中,然后通过SqlBulkCopy类将数据高效地导入SQL Server。SqlBulkCopy方法适用于大量数据的快速导入,比逐行插入更有效率。 注意...

    用C# 编程将Excel 文档数据导入SQLServer数据库

    在本教程中,我们将深入探讨如何使用C#将Excel文档中的数据有效地导入到SQL Server数据库中。这个过程涉及到文件I/O操作、数据处理和数据库连接,是数据迁移和ETL(提取、转换、加载)流程中常见的一步。 首先,...

    EXCEL与SQL SERVER 的导入与导出

    首先,Excel到SQL Server的导出通常用于将Excel中的数据批量导入到数据库中。这在数据分析、报表生成或者系统初始化时非常有用。导出过程涉及的关键步骤包括连接到SQL Server数据库,创建目标表(如果不存在),然后...

    asp.net Excel导入SQLserver源码

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

    WInform 程序 将Excel导入SQLSERVER数据库

    总结来说,使用WInform程序将Excel导入SQL Server数据库涉及多个步骤,包括设计用户界面、读取Excel、建立数据库连接、数据转换、批量插入和异常处理。这个过程需要对.NET编程、Excel操作以及SQL Server管理有深入的...

    C#+EXCEL导入数据库SQLserver 2005+

    标题中的"C#+EXCEL导入数据库SQLserver 2005+"是一个关于使用C#编程语言与Excel文件交互,并将数据导入到SQL Server 2005数据库的实践项目。这个项目可能适合那些初学者,他们希望通过这个实例学习如何在.NET环境中...

Global site tag (gtag.js) - Google Analytics