当前位置: 移动技术网 > IT编程>开发语言>c# > C#自动判断Excel版本使用不同的连接字符串

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
用oledb通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的。

用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"。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网