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         }
复制代码

posted @ 2013-10-21 19:41  落冰  阅读(1156)  评论(0编辑  收藏  举报