zoukankan      html  css  js  c++  java
  • C#用ado.net访问EXCEL的常见问题及解决方法

    C#用ado.net访问EXCEL的常见问题及解决方法,除了像sql server,access常见的数据库,其实Excel文件也可以做为数据库访问。

    ado.net访问excel的实例:

    OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = @"provider=Microsoft.jet.oledb.4.0;data source=[excel文件路径];Extended Properties=""Excel 8.0;HDR=YES;"""; cn.Open(); OleDbDataAdapter oda = new OleDbDataAdapter("select * from [Sheet1$]", cn); dtCode = new DataSet(); oda.Fill(dtCode); dataGridView1.DataSource = dtCode.Tables[0].DefaultView;

    注意:

    1、Excel的工作簿名作为表名,如Sheet1书写为[Sheet1$],[]和$都不能省略

    2、访问方式为oledb方式,provider=Microsoft.jet.oledb.4.0 ,特别是Extended Properties=""Excel 8.0;HDR=YES;"" 不能省略,省略就错了。HDR=YES表示excel表格的第一行数据作为表的字段名,实际数据从第二行开始。

    我在第一次做的时候碰到两个问题。

    (1)提示"找不到可安装的ISAM"

    这个是由于连接字符串缺少Extended Properties=""Excel 8.0;HDR=YES;"" 导致的。

    (2)提示"索引103开始处,初始化字符串的格式不符合规范"

    这是由于连接字符串书写错误造成的,请参考正确的格式。这个错误的提示对应的链接字符串如下:

    "provider=Microsoft.jet.oledb.4.0;data source=[excel文件路径];Extended Properties=""Excel 8.0;HDR=YES;" 可以看到错误是由于Extended Properties的值是由""括起来的,由于丢失了右边的括号,造成不符合规范。

    如果您用的 EXCEL2010,注意连接串需要修改:

    strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" +   @"Data Source=" + excelFilename + ";" +   "Extended Properties="Excel 12.0 Xml;HDR=No"";

    复制代码
     1 /// <summary>
     2 /// 将CSV转化为DataTable
     3 /// </summary>
     4 /// <param name="strFilePath"></param>
     5 /// <returns></returns>
     6         public static DataTable CSVToDataTable(string strFileFullPath)
     7         {
     8             if (string.IsNullOrEmpty(strFileFullPath))
     9             {
    10                 return null;
    11             }
    12             DataTable dt = new DataTable();
    13             try
    14             {
    15                 //得到路径
    16                 string strFilePath = Path.GetDirectoryName(strFileFullPath);
    17                 //得到文件名
    18                 string strFileName = Path.GetFileNameWithoutExtension(strFileFullPath);
    19                 //读取CSV文件
    20                 string connString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + strFilePath + ";Extensions=asc,csv,tab,txt;";
    21                 using (OdbcConnection odbcConn = new OdbcConnection(connString))
    22                 {
    23                     odbcConn.Open();
    24                     OdbcCommand oleComm = new OdbcCommand();
    25                     oleComm.Connection = odbcConn;
    26                     oleComm.CommandText = "select * from [" + strFileName + "#csv]";
    27                     OdbcDataAdapter adapter = new OdbcDataAdapter(oleComm);
    28                     adapter.Fill(dt);
    29                     dt.TableName = strFileName;
    30                     odbcConn.Close();
    31                 }
    32             }
    33             catch (Exception)
    34             {
    35                 throw;
    36             }
    37             return dt;
    38         }
    复制代码

  • 相关阅读:
    NEERC 15 (10/12)
    uoj259 & 独立集问题的一些做法
    Berlekamp-Massey算法简单介绍
    树链剖分的一种用法
    长链剖分
    [黑科技]常数优化的一些技巧
    tarjan解决路径询问问题
    Comet OJ
    洛谷P3835 【模板】可持久化平衡树(FHQ Treap)
    LOJ#107. 维护全序集(FHQ Treap)
  • 原文地址:https://www.cnblogs.com/jhabb/p/3381263.html
Copyright © 2011-2022 走看看