`

C#使用OleDb读取Excel,生成SQL语句

阅读更多

C#使用OleDb读取Excel,生成SQL语句

      之前在C#读取Excel数据动态生成对象并进行序列化也要对读取Excel文件,那时用的是Microsoft.Office.Interop.Excel组件,有一个致命的问题:读取效率低到不能忽略。所以一直想着有机会去换一个读取的机制,上网google了下,发现使用OleDb读写的效率是很不错的,所以在写把Excel的数据导成SQL语句的工具时,我就使用了OleDb,效率那是毫无疑问的。其实使用Microsoft.Office.Interop.Excel组件去读取Excel是相当于打开一个excel程序,而OleDb其实就是对Excel按数据库的方式进行读写。

     少说废话,直接贴代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
namespace ReadXlsxData
{
    static class ParseXlsx
    {
        public static readonly int COMMENT_INDEX=4;   //字段说明行下标
        public static readonly int KEY_INDEX = 5;    //主键行下标
        public static readonly int TYPE_INDEX = 6;   //字段类型行下标
        public static readonly int SQLNAME_INDEX = 7;      //数据库字段名行下标
        public static readonly int VALUE_INDEX = 8;      //value 行下标
        public static StringBuilder objectData = new StringBuilder();
        public static DataTable ToDataSet(string filePath)
        {
            string connStr = "";
           
            string fileType = System.IO.Path.GetExtension(filePath);
            if (string.IsNullOrEmpty(fileType)) return null;
            if (fileType == ".xls")
                connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
            else
                connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\"";
            string sql_F = "Select * FROM [{0}]";
            OleDbConnection conn = null;
            OleDbDataAdapter da = null;
            DataTable dataTable = new DataTable();
            try
            {
                // 初始化连接,并打开                  
                conn = new OleDbConnection(connStr);
                conn.Open();
                da = new OleDbDataAdapter();
                da.SelectCommand = new OleDbCommand(String.Format(sql_F, "Sheet1$"), conn);
                da.Fill(dataTable);
            }
            catch (Exception ex)
            {

            }
            finally
            {                  // 关闭连接                  
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                    da.Dispose();
                    conn.Dispose();
                }
            }
            conn.Close();
            da.Dispose();
            conn.Dispose();
            return dataTable;
        }
        public static string ReadExcelFile(string namef, string sqlfile, string sqlcomment)
        {
            objectData.Clear();
            DataTable dt = ToDataSet(namef);
            string temp, key,temp1,temp2;
            List<int> index = new List<int>();
         
            //创建表头
            objectData.Append("DROP TABLE IF EXISTS `" + sqlfile + "`;\n");
            objectData.Append("CREATE TABLE `" + sqlfile + "` (\n");
            int columnSize = dt.Columns.Count;
            int rowSize = dt.Rows.Count;
            DataColumn dc;
            DataRow dr;
            temp = string.Empty;
            key = string.Empty;
            temp1 = string.Empty;
            temp2 = string.Empty;
            DataRow dr5 = dt.Rows[COMMENT_INDEX],dr9=dt.Rows[SQLNAME_INDEX],dr8=dt.Rows[TYPE_INDEX];
            for (int i = 1; i < columnSize; i++)
            {
                dc = dt.Columns[i];
                temp2 = dr5[dc].ToString();
                temp1 = dr9[dc].ToString();
                if (temp2 == string.Empty)//空列判断
                    break;
                else if (temp1.ToString() != string.Empty)  //数据库字段
                {
                    index.Add(i);
                    temp = dr8[dc].ToString();
                    if (temp.Contains("vachar"))
                        objectData.Append("\t`" + temp1 + "` " + temp + " NOT NULL DEFAULT '' COMMENT '" + temp2 + "',\n");
                    else
                        objectData.Append("\t`" + temp1 + "` " + temp + " NOT NULL DEFAULT '0' COMMENT '" + temp2 + "',\n");
                    temp = dt.Rows[KEY_INDEX][dc].ToString();
                    if (temp != null && temp.Contains("key"))
                    {
                        key += "`" + temp1 + "` ";

                    }

                }
            }
            if(key!=string.Empty)
                objectData.Append("\tPRIMARY KEY (" + key + ")\n");
            objectData.Append(") ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='" + sqlcomment + "';\n");
            for (int i = VALUE_INDEX; i < rowSize; i++)   //读取数据记录
            {
                objectData.Append("INSERT INTO `" + sqlfile + "` VALUES ('");
                dr = dt.Rows[i];
                int length = index.Count;
                for (int j = 0; j < length; j++)
                {
                    objectData.Append(dr[index[j]] + "','");
                }
                objectData.Remove(objectData.Length - 3, 2);
                objectData.Append(");\n");
            }  
            return objectData.ToString();
        }
    }
 

}

 注:这段代码去掉了通用性,只考虑了读取Excel第一个sheet的情况。

    下面附上自己做的例子:

 
         

        转载在文首注明出处:http://dsqiu.iteye.com/blog/1895255

更多精彩请关注D.S.Qiu的博客和微博(ID:静水逐风)
 

 

 

 

 

参考:

Jyson: http://www.cnblogs.com/jys509/archive/2011/07/25/2116143.html

  • 大小: 111.3 KB
  • 大小: 109.5 KB
1
2
分享到:
评论
1 楼 sdgxxtc 2017-03-10  
[quo[color=red]te][/color]

相关推荐

    Microsoft.ACE.OLEDB.12.0-提供程序

    【Microsoft.ACE.OLEDB.12.0-提供程序】本资源是C#程序使用OleDb读取Excel时必备的驱动程序——Microsoft.ACE.OLEDB.12.0的提供程序。OleDb是一个数据库驱动接口,能够通过标准的 SQL 语句访问多种数据库,包括 ...

    C#操作Excel(OLEDB)

    下面是一段基本的C#代码示例,展示了如何使用OLEDB打开并读取Excel文件: ```csharp using System; using System.Data; using System.Data.OleDb; class ExcelOperations { public static void ReadExcelFile...

    C# WinFORM 窗体小程序 oledb技术读取EXCEL表格并展示

    这个项目就是一个典型的示例,它演示了如何使用OleDb技术来读取Excel表格的数据,并在窗体上通过DataGridView控件进行展示。下面将详细讲解这个过程涉及的知识点。 首先,`OleDb`(OLE DB)是微软提供的一种数据...

    C#以OleDb方式访问Excel2007所需文件的安装程序

    当我们需要从C#程序中读取或写入Excel 2007文件时,通常会使用OleDb(开放数据库连接)技术。然而,由于Excel 2007引入了新的文件格式(.xlsx),传统的Jet Engine(也称为Microsoft Office Access Database Engine...

    C#使用oledb操作excel文件的方法

    总之,C#使用OleDb操作Excel文件提供了简单且快速的途径,特别适合于只需要读写数据而无需处理复杂格式的情况。通过正确配置连接字符串和使用`OleDbConnection`、`OleDbCommand`等对象,我们可以方便地从Excel文件中...

    OLEDB.rar_CSharp oledb_GenericOLEDB_c# oledb语句_c#oledb_oledb

    在C#编程中,OLEDB(Object Linking and Embedding, Database)是一个强大的数据访问接口,用于连接多种数据源,包括Microsoft Access、Excel、SQL Server等。本教程将基于"OLEDB.rar"压缩包中的"CSharp oledb_...

    三种ASP.NET读取Excel文件的方法浅析(含完整代码)

    #### 方法一:使用OleDB读取Excel文件 **概述** 本文档介绍了一种通过OleDB访问Excel文件的方式,将其作为数据源来读取其中的数据。这种方法适用于Excel文件版本为97至2003之间的格式(.xls)。使用此方法时,需要...

    C# 通过 oledb 操作Excel实例代码

    可以使用SQL语句“CREATE TABLE”创建Excel中的表。例如,创建名为table1的表,包含id(整型)、name(字符串)和datecol(日期类型)三个字段。 5. 向Excel表中插入数据: 使用SQL语句“INSERT INTO”将数据插入...

    C#用Sql数据库查询方法操作Excel表格

    10. **OleDb或Odbc连接**:另一种方法是使用`System.Data.OleDb`或`System.Data.Odbc`命名空间,通过ODBC或OLEDB驱动程序直接查询Excel文件,就像它们是数据库一样。但这种方法对旧版Excel文件支持较好,对现代Open ...

    OLEDB连接SQLserver2005

    在C#中,使用OLEDB连接SQL Server 2005主要涉及以下知识点: 1. **安装依赖**:首先,确保已经安装了SQL Server 2005,这是运行SQL Server数据库的基础。同时,开发环境Visual Studio (VS)也需要安装,因为C#代码...

    C#编写的OleDb数据库连接通用类库.7z

    首先,OleDb(Object Linking and Embedding, Database)是一个微软的数据访问接口,允许开发者通过统一的方式访问多种数据源,包括关系型数据库(如SQL Server、Access)、Excel文件、XML文档等。使用OleDb,开发者...

    使用C#读取excel文件

    需要注意的是,对于较新的Excel文件格式(2007及以上版本),应使用`Microsoft.ACE.OLEDB.12.0`提供程序代替`Microsoft.Jet.OLEDB.4.0`,因为Jet引擎不支持这些新格式。此外,如果你的项目中没有引用`System.Data....

    C#用OleDb读取数据库数据

    本主题聚焦于如何使用C#中的OleDb组件来读取数据库中的数据。OleDb(Object Linking and Embedding, Database)是.NET Framework提供的一种数据库访问技术,它允许程序员以统一的方式访问多种不同的数据库系统。 ...

    C# oledb 连接DB2数据库实例(源代码)

    在成功建立连接后,你可以使用`OleDbCommand`执行SQL语句,然后通过`OleDbDataReader`读取查询结果。如果在连接或执行过程中遇到错误,异常处理部分会捕获并打印错误信息。 此外,对于更复杂的数据库操作,如事务...

    C#使用oledb导出数据到excel的方法

    本文将详细介绍如何使用OLEDB(Object Linking and Embedding, Database)技术来实现C#中数据到Excel的导出,并提供相关的编程技巧和注意事项。 首先,我们需要了解OLEDB是一个通用的数据库访问接口,它允许应用...

    c# 读取 excel sheet(工作簿) 名字

    - **查询特定Sheet**:使用SQL语句查询特定的Sheet,这里假设查询第一个Sheet中的所有数据。 #### 六、注意事项 1. **兼容性问题**:如果处理的是Excel 2007及以上版本的.xlsx文件,则需要使用ACE OLEDB 12.0驱动...

    c#中完整的读取excel表格代码

    - 使用SQL查询语句(`SELECT * FROM [Sheet1$]`)指定要读取的数据范围。 - 打开连接后,使用`OleDbDataAdapter`填充`DataSet`对象。 4. **数据绑定**: - 最后,将`DataSet`中的数据绑定到`DataGridView`控件上,...

    Microsoft OLE DB Provider for Visual FoxPro 9.0

    4. 查询:执行SQL语句或者使用命令对象进行数据操作。 **适用场景**: - 数据迁移:将Visual FoxPro数据库中的数据迁移到其他数据库系统,如SQL Server或Oracle。 - 应用程序集成:将Visual FoxPro数据库集成到基于...

    ADO.NET读取Excel

    **使用Microsoft.Jet.OLEDB.4.0驱动读取Excel** 1. 引入引用:在C#代码中,需要添加对`System.Data.OleDb`命名空间的引用。 2. 连接字符串:创建一个连接字符串,指定Excel文件的位置。例如: ```csharp string ...

Global site tag (gtag.js) - Google Analytics