C#读取Excel的其中一种方式OleDb读取(100万条)--快速大量插入SQL中

主要运用表类型

 1 Create table BulkTestTable(
 2 Id nvarchar(32),
 3 UserName nvarchar(32),
 4 Pwd nvarchar(32)
 5 )
 6 Go
 7 CREATE TYPE BulkUdt AS TABLE
 8 (Id nvarchar(32),
 9 UserName nvarchar(32),
10 Pwd nvarchar(32) )

C#端读取Excel

    /// <summary>
        /// 读取Excel中数据
        /// </summary>
        /// <param name="strExcelPath"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public DataTable GetExcelTableByOleDB(string strExcelPath, string tableName)
         {
             try
             {
                 DataTable dtExcel = new DataTable();
                 //数据表
                 DataSet ds = new DataSet();
                 //获取文件扩展名
                 string strExtension = System.IO.Path.GetExtension(strExcelPath);
                 string strFileName = System.IO.Path.GetFileName(strExcelPath);
                 //Excel的连接
                 OleDbConnection objConn = null;
                 switch (strExtension)
                 {
                     case ".xls":
                         objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"");
                         break;
                     case ".xlsx":
                         objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"");
                         break;
                     default:
                         objConn = null;
                         break;
                 }
                 if (objConn == null)
                 {
                     return null;
                 }
                 objConn.Open();
                 //获取Excel中所有Sheet表的信息
                 //System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
                 //获取Excel的第一个Sheet表名
                // string tableName1 = schemaTable.Rows[0][2].ToString().Trim();
                 string strSql = "select * from [" + tableName + "$]";
                 //获取Excel指定Sheet表中的信息
                 OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
                 OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
                 myData.Fill(ds, tableName);//填充数据
                 objConn.Close();
                 //dtExcel即为excel文件中指定表中存储的信息
                 dtExcel = ds.Tables[tableName];
                 return dtExcel;
             }
             catch(Exception ex)
             {
                 MessageBox.Show(ex.Message);
                 return null;
             }

         }

  C#端插入到sql表中

 /// <summary>
        /// 导入msSql
        /// </summary>
        /// <param name="?"></param>
        /// <returns></returns>
        public int ExcelToMsSQL(string tablename,DataTable dt)
        {

          int count = 0;

            string Connstr = "Data Source=;Initial Catalog=;Persist Security Info=True;User ID=;Password=";
            SqlConnection sqlConn = new SqlConnection(Connstr);
            const string TSqlStatement =
    "insert into BulkTestTable (Id,UserName,Pwd)" +
    " SELECT nc.Id, nc.UserName,nc.Pwd" +
    " FROM @NewBulkTestTvp AS nc";
            SqlCommand cmd = new SqlCommand(TSqlStatement, sqlConn);
            SqlParameter catParam = cmd.Parameters.AddWithValue("@NewBulkTestTvp", dt);
            catParam.SqlDbType = SqlDbType.Structured;
            //表值参数的名字叫BulkUdt,在上面的建立测试环境的SQL中有。
            catParam.TypeName = "dbo.BulkUdt";
            try
            {
                sqlConn.Open();
                if (dt != null && dt.Rows.Count != 0)
                {
                  count =  cmd.ExecuteNonQuery();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                sqlConn.Close();
            }  

            return count ;
        }

  

时间: 2024-10-10 15:20:25

C#读取Excel的其中一种方式OleDb读取(100万条)--快速大量插入SQL中的相关文章

使用 EasyExcel 读取Excel(两种方式)

引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>1.1.2-beta5</version> </dependency> EasyExcel支持对实体类中的属性进行注解,方便后续进行读写操作.  id 为 表头,index 代表的是 第0行 @ExcelProperty

简介C#读取XML的两种方式

简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询 XML作用 对于XML,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的Web开发中XML一定会大放异彩,XML是可扩展标记语言,使用它企 业可以制定一套自己的数据格式.用于Internet的数据

FileReader读取文件的三种方式

package com.agoly.test; //import java.io.*; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class FileTest { public static void main(String[] args) { // 读取文件的方式一:逐个字符来读取文本文件 FileReader fr = null; try { fr

该种方式是将待执行的代码放入try中

该种方式是将待执行的代码放入try中,如果执行的代码发生异常就会被catch,从而执行catch中的代码. (2)再来看一下throw:该种抛出异常的方式比较直接 ? 1 2 3 if(age < 0){ throw new MyException("年龄不能为负数!"); } 可以看出是直接抛出一种具体的异常. 二.声明异常throws java中可以对一个方法在定义时就进行异常的声明,而后在实现时可以利用throw具体的抛出异常. ? 1 2 3 4 5 6 7 8 9 10

【Android进度条】三种方式实现自定义圆形进度条ProgressBar

一.通过动画实现 定义res/anim/loading.xml如下: [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <animation-list android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> &

Freemarker入门小案例(生成静态网页的其中一种方式)

其实生成静态网页的方式有好多种,我昨天看了一下,Freemarker是其中一种,但是Freemarker现在我们都用得比较少了,现在用得ActiveMQ用来发送信息到静态页面,不过想了一下这个小东西,还是想给大家分享一下,我的小小心得. 若项目为Maven项目,那么可以如下 在Pom.xml文件里面添加 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</arti

Python操作excel的几种方式--xlrd、xlwt、openpyxl

openpyxl xlrd xlwt 在处理excel数据时发现了xlwt的局限性–不能写入超过65535行.256列的数据(因为它只支持Excel 2003及之前的版本,在这些版本的Excel中行数和列数有此限制),这对于实际应用还是不够的.为此经过一番寻找发现了一个支持07/10/13版本Excel的openpyxl,虽然功能很强大,但是操作起来感觉没有xlwt方便.下面分别说下几个模块的常用操作. xlrd xlrd是用来从Excel中读写数据的,但我平常只用它进行读操作,写操作会遇到些问

POI导出excel的三种方式

原文链接:https://www.cnblogs.com/zhaoblog/p/7661245.html poi导出excel最常用的是第一种方式HSSFWorkbook,不过这种方式数据量大的话会产生内存溢出问题,SXSSFWorkbook是一种大数据量导出格式,csv是另一种excel导出的一种轻快的实现. 先介绍一下这三种格式的特点 1 HSSFWorkbook  excel文件底层是txt实现,我们经常见到的excel都是这种实现的. 2 SXSSFWorkbook  excel文件底层

Java报表工具FineReport导出EXCEL的四种方式

在实际的应用中会经常需要将数据导出成excel,导出的方式除原样导出还有分页导出.分页分sheet导出和大数据量导出.对于excel2003版,限制了每个sheet的最大行数和列数,大数据量导出时会默认时分多个sheet,而excel2007不会出现这样的问题.这些导出方式在JAVA程序中分别有不同的接口来实现: 1.  原样导出 原样导出就是不预览直接导出excel 其程序接口代码如下: outputStream = new FileOutputStream(new File("E:\\Exc