C#自动判断Excel版本使用不同的连接字符串

 更新时间:2015年06月16日 11:49:18   投稿:junjie  
这篇文章主要介绍了C#自动判断Excel版本使用不同的连接字符串,本文重点在不同版本的连接字符串介绍,需要的朋友可以参考下

用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的。

  /// <summary>
  /// 把数据从Excel装载到DataTable
  /// </summary>
  /// <param name="pathName">带路径的Excel文件名</param>
  /// <param name="sheetName">工作表名</param>
  /// <param name="tbContainer">将数据存入的DataTable</param>
  /// <returns></returns>
  public DataTable ExcelToDataTable(string pathName, string sheetName)
  {
    DataTable tbContainer = new DataTable();
    string strConn = string.Empty;
    if (string.IsNullOrEmpty(sheetName)) { sheetName = "Sheet1"; }
    FileInfo file = new FileInfo(pathName);
    if (!file.Exists) { throw new Exception("文件不存在"); }
    string extension = file.Extension;
    switch (extension)
    {
      case ".xls":
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
        break;
      case ".xlsx":
        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
        break;
      default:
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
        break;
    }
    //链接Excel
    OleDbConnection cnnxls = new OleDbConnection(strConn);
    //读取Excel里面有 表Sheet1
    OleDbDataAdapter oda = new OleDbDataAdapter(string.Format("select * from [{0}$]", sheetName), cnnxls);
    DataSet ds = new DataSet();
    //将Excel里面有表内容装载到内存表中!
    oda.Fill(tbContainer);
    return tbContainer;
  }

这里需要注意的地方是,当文件的后缀名为.xlsx(excel2007/2010)时的连接字符串是"Provider=Microsoft.ACE.OLEDB.12.0;....",注意中间红色部分不是"Jet"。

相关文章

  • C# 中的 is 真的是越来越强大越来越语义化(推荐)

    C# 中的 is 真的是越来越强大越来越语义化(推荐)

    这篇文章主要介绍了C# 中的 is 真的是越来越强大越来越语义化,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • C#入参使用引用类型要加ref的原因解析

    C#入参使用引用类型要加ref的原因解析

    这篇文章主要介绍了C#入参使用引用类型要加ref的原因解析,我们在实际开发中还是能够碰到一些引用类型添加ref的场景,其实道理也是一样的,就是将引用类型的栈的地址传递到了方法中,那么和不添加有啥区别,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • C#实现字符串倒序的写法

    C#实现字符串倒序的写法

    这篇文章主要为大家详细介绍了C#实现字符串倒序的多种写法,以LINQ写法最为简洁,感兴趣的朋友可以参考一下
    2016-05-05
  • C#解决引用类型的深度克隆问题

    C#解决引用类型的深度克隆问题

    本文将给大家介绍如何让引用类型的对象复制以后各自拥有独立的内存从而实现一个对象值的变化不会影响别的对象,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-08-08
  • Unity实现苹果手机Taptic震动

    Unity实现苹果手机Taptic震动

    这篇文章主要介绍了Unity实现苹果手机Taptic震动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • VS里使用C#制作窗口应用的项目实践

    VS里使用C#制作窗口应用的项目实践

    C#窗体的频率使用特别高,本文主要介绍了VS里使用C#制作窗口应用的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • C#中的TemplateMethod模式问题分析

    C#中的TemplateMethod模式问题分析

    这篇文章主要介绍了C#中的TemplateMethod模式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • C# string格式的日期时间字符串转为DateTime类型的方法

    C# string格式的日期时间字符串转为DateTime类型的方法

    这篇文章主要介绍了C# string格式的日期时间字符串转为DateTime类型的方法,需要的朋友可以参考下
    2017-02-02
  • C# 获取硬件参数的实现方法

    C# 获取硬件参数的实现方法

    这篇文章主要介绍了C# 获取硬件参数的实现方法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • C#设置右键菜单的方法

    C#设置右键菜单的方法

    这篇文章主要介绍了C#设置右键菜单的方法,实例分析了C#设置右键菜单的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论