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

你可能感兴趣的:(Excel)