我们需要同时使用ADODB和OLEDB吗?

本文关键字:ADODB OLEDB 我们 | 更新日期: 2023-09-27 18:14:22

我是c#新手,我正在开发一个使用小型Access数据库的应用程序。我试图了解使用什么,ADODB或OLEDB,但似乎我无法解决这个问题。

那么,是否可以只使用其中一个库呢?还是两者都正常使用?

例如,数据库中常见的内容:

string MyQuery = "SELECT * FROM MyTable";
Recordset rs = new Recordset();
rs.Open(MyQuery, MyConnection, CursorTypeEnum.adOpenKeyset, LockTypeEnum.adLockOptimistic);

使用所有ADODB对象,直到:

OleDbDataAdapter adapter = new OleDbDataAdapter();
DataTable dt = new DataTable("MyTable");
adapter.Fill(dt, rs);

所以我给Datatable一个DataGridView。适配器是OLEDB,而不是ADODB。有没有办法避免OLEDB?所以,我想我摆脱了ADODB,在OLEDB中做所有事情,一切都很顺利,直到我想在运行时添加表:

ADOX.Catalog MyCat = new ADOX.Catalog();
MyCat.ActiveConnection = MyConnection;
ADOX.Table table = new ADOX.Table();
table.Name = "MyTable";
table.Columns.Append("ID", ADOX.DataTypeEnum.adInteger);
table.Columns["ID"].ParentCatalog = MyCat;
table.Columns["ID"].Properties["AutoIncrement"].Value = true;
table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "ID");
table.Columns.Append("DateAdded", ADOX.DataTypeEnum.adDate);
table.Columns.Append("Name");
table.Columns.Append("Surname");
cat.Tables.Append(table);

目录绝对拒绝OLEDB连接,而要求ADODB连接,因此我需要挽救ADODB。

所以,最后,我是否需要辞职使用两者,或者我在我发布的代码样本中做错了什么?欢迎替代方案,提前感谢。

对于一个新手来说,知道该使用哪个系统并坚持使用它是非常好的,因为知道它可以做所有需要做的事情。

我们需要同时使用ADODB和OLEDB吗?

摘自MCC的回答,MVP:

OLEDB是一个微软标准,它定义了一组用于访问数据库的API(应用程序接口)函数。它是一个COM(组件对象模型)API,是ODBC API的后续。通常,OLEDB用于创建特定于数据库的驱动程序,称为提供程序,它可以由更高级别的数据访问库(如ADO或ADO.NET)实现。

ADO (ADODB)是一个通用(COM)数据库库,它可以被编程语言(如Visual Basic和c++)用来访问OLEDB Provider已经开发的任何类型的数据库。在这个上下文中,ADO是一个OLEDB消费者。它与OLEDB提供程序通信,而提供程序又直接与数据库或数据库服务器通信。

例如,要打开Access数据库,ADODB的Connection对象将在其连接字符串中指定Jet OLEDB提供者,以打开数据库并随后与数据库通信:

ADODB.Connection cnn;
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                            "Data Source=E:'My Documents'db1.mdb;" +
                            "Jet OLEDB:Engine Type=5";
cnn.Open();

对我来说,这意味着除非你有一个特定的ADO提供程序,否则直接使用OLEDB会更好/更快。

然而,OLE可能需要更多的开发时间,尽管ADO的开发速度更快,但性能比OLE慢。

一些主要问题:你的连接字符串是什么?(您的问题意味着您在连接字符串中使用了ADODB提供程序)。什么是ADOX

注:给你一些参考资料:

Microsoft Access性能提示加速您的Access数据库

连接字符串

EDIT:从2007版开始,Access包含了一个Office专用版本的Jet,最初称为Office Access Connectivity Engine (ACE),但现在称为Access Database Engine。该引擎与以前版本的Jet引擎完全向后兼容,因此它可以读取和写入来自早期Access版本的(.mdb)文件。它引入了一种新的默认文件格式(.accdb),它为Access带来了一些改进,包括复杂的数据类型,如多值字段、附件数据类型和备忘录字段中的历史跟踪。它还带来了安全性和加密方面的改进,并支持与Microsoft Windows SharePoint Services 3.0和Microsoft Office Outlook 2007的集成。

你也可能会遇到64位问题的Jet…

"驱动程序不是Windows操作系统的一部分,但可以作为可重新分发的。[11]以前Jet数据库引擎只有32位,不能在64位版本的Windows下本机运行。"

关于如何通过c#使用MS Access,请阅读这个很好的教程如果你向下滚动到标题为"Access (accdb)"您将看到代码使用了ADOX.catalog.

EDIT2: 有关ADOX的资料。读一读目录通过将ActiveConnection属性设置为ADO连接对象或有效的连接字符串来打开目录。

所以试试这样做…摘自Gord Thompson接受的答案下面的帖子

ADOX.Catalog cat;
ADOX.Table tbl;
cat.ActiveConnection = _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:'Users'Public'Database1.accdb;"