用C#访问Access数据库

  我编写这个程序的动机是当我希望用c sharp访问MSAccess数据库的时候我没有办法获得任何信息和参考材料.网上所能获得的所有材料都是偏重于SQL的,所以我们将分两步来编写这个应用程序,第一我们将展示如何连接到MSAccess数据库然后看看它有多复杂.最后,我们就这样完成了这个程序.

闲言少序,让我们开始正题.连接到数据库的过程与我们早先的ADO连接过程相比已经发生了较大的变化.下面的图表恰当的(我希望如此)OleDbConnection--> OleDbCommand --> OleDbDataReader.现在那些熟悉ado的人很明显能看出两者的相似之处但是为了使那些还没有很好的适应ado的人能够明白,下面是一些解释.

OleDbConnection -->代表对数据库的单一连接,根据底层数据库的功能它能给你操纵数据库的能力.有一点必须记住,虽然oledbconnection对象出了作用范围,它也不会自动被关闭.所以,你将不得不显示的调用这个对象的close()方法.

OleDbCommand -->这是就象我们在ado中使用的一样的通常的command对象.你可以通过这个对象调用sql存储过程或是sql查询语句.

OleDbDataReader -->这个类拥有非常大的重要性因为它提供了实际上的对数据库底层数据集的访问.当你调用OleDbCommand的ExecuteReader方法的时候它就会被创建,.NET beta2 sdk说不要直接创建这个类的对象.

现在你可以在.NET beta 2的文档中看到更多的关于这些主要对象的说明,下面是指出如何在程序中访问数据库的源代码.

using System;
using System.Data.OleDb;

class OleDbTest{

public static void Main()
{
//创建数据库连接
OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c://db1.mdb");

//创建command对象并保存sql查询语句
OleDbCommand aCommand = new OleDbCommand("select * from emp_test", aConnection);
try
{
aConnection.Open();

//创建datareader 对象来连接到表单
OleDbDataReader aReader = aCommand.ExecuteReader();
Console.WriteLine("This is the returned data from emp_test table");

//循环遍历数据库
while(aReader.Read())
{
Console.WriteLine(aReader.GetInt32(0).ToString());
}

//关闭reader对象
aReader.Close();

//关闭连接,这很重要
aConnection.Close();
}

//一些通常的异常处理
catch(OleDbException e)
{
Console.WriteLine("Error: {0}", e.Errors[0].Message);
}
}
}

成功运行这个程序的步骤
1.用msaccess创建一个名叫db1.mdb的数据库
2.创建一个名叫emp_test的表单
3.使它包含下列数据域
emp_code int
emp_name text
emp_ext text
4.将上面的代码保存到sample.cs文件中
5.确保数据库位于c:/并确保mdac2.6或是更新的版本已经被安装
6.编译运行

现在让我们来了解一些我们在oledbconnection对象的构造函数看到的东西的一些细节,在这里你看见诸如"provider="之类的东西.下面是一些和ado.net兼容的驱动程序类型.
sqlolddb --> Microsoft OLE DB Provider for SQL Server,
msdaora --> Microsoft OLE DB Provider for Oracle,
Microsoft.Jet.OLEDB.4.0 --> OLE DB Provider for Microsoft Jet
你可以选择其中的任何一个但是他们会需要传递不同的参数,例如jet.oledb.需要传递mdb文件的名字而sqloledb需要传递用户名和密码.

所有这些驱动程序都位于System.Data.OleDb命名空间里,所以你必须包括它,而且它们和oledb provider for odbc不兼容,也就是说你不能在vb6.0程序里使用这些驱动程序来访问数据库,所以不要去寻找解释为什么要把这些数据库放在c:/上的资料了

当你使用Microsoft SQL Server 7.0 或者更新版本的时候,下面是微软给出的一些指导:
推荐使用.NET Data Provider在下列情况中,使用Microsoft SQL Server 7.0 或者更新版本的中间层应用程序,使用Microsoft Data Engine (MSDE)或icrosoft SQL Server 7.0 或者更新版本的单层应用程序.
建议将OLE DB Provider for SQL Server (SQLOLEDB)和OLE DB .NET Data Provider一起使用.
对于Microsoft SQL Server 6.5和更早的版本,你必须同时使用OLE DB Provider for SQL Server 和 OLE DB.NET Data Provider.
推荐使用Microsoft SQL Server 6.5和更早的版本或是Oracle的中间层应用程序使用OLE DB .NET Data Provider.
对于Microsoft SQL Server 7.0 或者更新版本,推荐SQL Server .NET Data Provider.
推荐单层应用程序使用Microsoft Access数据库.
不推荐一个中间层程序同时使用OLE DB .NET Data Provider和Microsoft Access数据库.
不再支持OLE DB Provider for ODBC (MSDASQL) 

----------------------------------------------------

附录:

 

获取表名和字段

 

public   static  DataTable GetSchemaTable(string connectionString)  //获取Access所有的表名;
        {
            using (OleDbConnection connection = new
                       OleDbConnection(connectionString))
            {
                connection.Open();
                DataTable schemaTable = connection.GetOleDbSchemaTable(
                    OleDbSchemaGuid.Tables,
                    new object[] { null, null, null, "TABLE" });
                return schemaTable;
            }
        }
 private string[] GetTabelName(string conn)  //获取Access文件中所有表名,放在数组里面
        {
            DataTable dt = GetSchemaTable(conn);
            int n = dt.Rows.Count;
            string[] strTable = new string[n];
            int m = dt.Columns.IndexOf("TABLE_NAME");
            for (int i = 0; i < n; i++)
         ......

阅读更多
个人分类: C# Articles
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭