在.NET环境中,数据库的连接和查询是通过数据提供者来实现的。OLE DB.NET数据提供者通过System::Data::OleDb命名空间中的各种类来实现。本文将重点介绍其中的三个类:OleDbConnection、OleDbCommand和OleDbDataReader。
在开始之前,需要先做一些准备工作,例如创建一个MDB文件。
首先,创建一个新的MS Access数据库,命名为test.mdb,并在其中创建一个名为'main'的表。然后,为'main'表添加两个字段:'Name'(文本类型)和'Age'(数字类型)。
将test.mdb文件复制到D盘根目录下。
在.NET中,数据库连接和查询是通过数据提供者实现的。OLE DB.NET数据提供者通过System::Data::OleDb命名空间中的类来实现。本文将重点介绍其中的三个类:OleDbConnection、OleDbCommand和OleDbDataReader。
OleDbConnection对象代表数据库连接。OleDbCommand对象封装了一个SQL命令,该命令在数据库连接上执行。当对数据库表执行INSERT或UPDATE查询时,只需要这两个类。但是,当从表中检索数据时,还需要使用OleDbDataReader类。这个类允许以只向前的顺序浏览记录集。
// 创建OleDbConnection对象,并将其与数据库关联
OleDbConnection* conn = new OleDbConnection(
"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb"
);
// 打开数据库连接
conn->Open();
// 创建一个OleDbCommand对象,并将其与SQL命令和OleDbConnection对象关联
OleDbCommand* cmd = new OleDbCommand(sqlstr, conn);
// 执行SQL命令
cmd->ExecuteNonQuery();
// 关闭数据库连接
conn->Close();
插入记录是两个过程中较简单的一个。使用OleDbConnection对象创建一个连接,创建一个OleDbCommand对象,并将其与OleDbConnection对象关联。然后,调用ExecuteNonQuery方法,该方法将执行传递给OleDbCommand构造函数的SQL命令。然后关闭连接。
// 创建OleDbConnection对象,并将其与数据库关联
OleDbConnection* conn = new OleDbConnection(
"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb"
);
// 打开数据库连接
conn->Open();
// 创建一个OleDbCommand对象,并将其与SQL读取查询和连接关联
OleDbCommand* cmd = new OleDbCommand(sqlstr, conn);
// 获取OleDbDataReader对象以浏览记录集
OleDbDataReader* rdr = cmd->ExecuteReader();
// 继续向前读取记录
while (rdr->Read())
{
// 使用各种可用的方法读取数据
// 例如:GetValue, GetValues, Item等
Console::WriteLine(rdr->get_Item("FullName"));
}
// 关闭数据库连接
conn->Close();
这基本上与创建OleDbConnection和OleDbCommand对象相同。但是,不直接调用ExecuteNonQuery,而是调用ExecuteReader,它将返回一个OleDbDataReader对象。可以使用这个OleDbDataReader对象浏览记录集。继续调用Read方法,当它完成整个记录集时,将返回false。有几种方法可以从记录集中读取,但喜欢使用get_Item,因为它允许指定字段名称,而不是像GetValue这样的其他函数,需要传递表中字段的索引,这在看来是一个不好的方法。