Visual C#读取ExcelAccess数据库


三峡大学土木水电学院 肖泽云


Content

一、读取Excel表格... 1

二、保存Excel文件... 5

三、获取表的名称... 6

四、打开指定的Excel表格... 8

五、读取Access数据库... 10

六、获取Access表信息... 12

七、打开指定的Access表... 13

一、读取Excel表格

读取Excel表格数据主要有两种方式:第一种就是采用OleDb;第二种就是采用Application对象。采用第一种方式可以在用户不安装Excel的情况下读写Excel文件,后一种方式则要求在用户安装Office的情况下才能使用。

1、OleDb方式

OLEDB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口。它不仅可以连接Excel,还可以连接Access、SQL Server数据库等。使用OLEDB的应用程序会用到如下的请求序列:初始化OLE、连接到数据源、发出命令、处理结果、释放数据源对象并停止初始化OLE。

具体过程如下:

1)首先,定义OleDbConnection对象用于OleDb连接数据库文件(Excel文件、Access文件等)。在其定义时就指定其连接数据库信息,如数据类型、文件路径等,如下:

对于连接Access:

string@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";";

对于连接Excel:

string@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=Excel 8.0";

定义OleDbConnection对象如下:

OleDbConnectionnew OleDbConnection(strConn);

2)打开连接。前面已经定义了OleDbConnection对象,下面需要打开这个连接,如下:

odcConnection.Open();

3)建立SQL查询,即告诉连接查询数据库(文件)中的哪个表或符合要求的数据,如下:

OleDbCommand odCommand = odcConnection.CreateCommand();

添加查询命令,如下:

odCommand.CommandText = @"SELECT * FROM [sz_fcd$]";

其中,对于Excel中要获取某个表,则需要将表名用中括号括起并在尾部添加符号“$”,如上Excel文件中表名称为sz_fcd,此处要使用[sz_fcd$]。但是对于读取Access数据库就没有这个要求,直接使用表的名称即可。

4)执行查询,显示数据。使用OleDbDataReader对象读取查询的数据,定义如下:

OleDbDataReader odrReader = odCommand.ExecuteReader();

在此需要注意的是,OleDbDataReader对象的GetName(int i)方法获取的是第i列的名称,每次使用OleDbDataReader对象的Read()方法即表示读取下一行数据,OleDbDataReader对象的FieldCount属性表示数据的列数,一般情况下,第一次读取的为字段名称(未使用Read()方法之前)。使用OleDbDataReader对象[int i]则表示获取该行中第i列的数据,如odrReader[1],也可以使用名称,如odrReader[“NO”]。

整个过程的程序代码如下所示:

private void使用OleDb打开Excel_Click(object sender, EventArgs
 {
OpenFileDialog openDG = new OpenFileDialog();
"打开Excel表格";
"Excel表格(*.xls)|*.xls|CSV格式(*.csv)|*.csv|所有文件(*.*)|*.*";
 openDG.ShowDialog();
string
 filename = openDG.FileName;

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + filename + ";Extended Properties=Excel 8.0";
OleDbConnection odcConnection = new OleDbConnection(strCon);
 odcConnection.Open();

OleDbCommand
"SELECT * FROM [sz_fcd$]";

OleDbDataReader

int
 dataGridView1.Rows.Clear();
//添加列的名称
for (int
 {
"", odrReader.GetName(i));
 }
int
while
 {
 dataGridView1.Rows.Add();
for (int
 {
 dataGridView1.Rows[j].Cells[i].Value = odrReader[i].ToString();
 }
 j++;
 } 
 }

2、Application对象方式

在使用这种方式前,需要添加引用Microsoft Excel Object Library,如下图所示:

access 获取建表语句 excel获取access数据库_Interop

使用Application对象方式操纵Excel主要是获取Excel的Application对象,然后通过Workbook对象打开Excel文件,通过Worksheet对象获取Excel文件中的表。具体步骤如下:

1)首先定义Excel对象,如下:

Application excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

2)定义Workbook对象并打开文件,如下:

Workbook
 excelApp.Workbooks.Open(filename, missingValue, missingValue, missingValue, missingValue, missingValue
 , missingValue, missingValue, missingValue, missingValue, missingValue, missingValue,missingValue, missingValue, missingValue);
 myWorkBook = excelApp.Workbooks.get_Item(1);

其中有很多参数为missingValue,这些参数默认都可以不需要,定义其值为:

objectMissing.Value;

3)获取工作表对象,如下:

Microsoft.Office.Interop.Excel.Worksheet
newSheet=(Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Sheets[1];

其中,WorkBook对象的Sheets[Object index]方法为获取Excel文件中的第几个工作表。工作表Worksheet对象的name属性可以返回工作表的名称。

4)获取工作表中的数据,由于一个Excel工作表中的行数和列数有很多(共有65536行,256列),所以不可能获取所有的单元格,只能根据选择范围来获取,如指定获取个数等。另外,要获取某个单元格的值,不能直接使用Cells[i, j]来获取,要使用Range对象,如下:

Microsoft.Office.Interop.Excel.Range rng2 = (Microsoft.Office.Interop.Excel.Range)newSheet.Cells[i + 1, j + 1];

整个过程程序代码如下:

private void使用App打开Excel_Click(object sender, EventArgs
 {
OpenFileDialog openDG = new OpenFileDialog();
"打开Excel表格";
"Excel表格(*.xls)|*.xls|CSV格式(*.csv)|*.csv|所有文件(*.*)|*.*";
 openDG.ShowDialog();
string
 filename = openDG.FileName;

object missingValue = System.Reflection.Missing.Value;

Application
new Microsoft.Office.Interop.Excel.ApplicationClass();
Workbook
 excelApp.Workbooks.Open(filename, missingValue, missingValue, missingValue, missingValue, missingValue
 , missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
 myWorkBook = excelApp.Workbooks.get_Item(1);
Worksheet
Worksheet)myWorkBook.Sheets[1];

 dataGridView1.Columns.Clear();
int
Range
while ((rng1 = (Microsoft.Office.Interop.Excel.Range)newSheet.Cells[1, m]).Value2 != null)
 {
"", m.ToString());
 m++;
 }
 m--;

while ((rng1 = (Microsoft.Office.Interop.Excel.Range)newSheet.Cells[n, 1]).Value2 != null)
 {
 dataGridView1.Rows.Add();
 n++;
 }
 n--;

for (int
 {
for (int
 {
Range)newSheet.Cells[i + 1, j + 1];
 dataGridView1.Rows[i].Cells[j].Value = rng1.Value2;
 }
 }
 excelApp.Quit();
 }

其中,通过While语句判断Excel工作表中的行数和列数。