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

时间:2015-09-23 10:11:51

标签: c# database

我是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。

所以,最后,我是否需要辞职才能使用这两个,或者我在我发布的代码示例中做错了什么?欢迎提供替代方案,谢谢。

新手知道使用哪个系统并坚持使用它会非常好,因为它知道它可以完成所有需要完成的工作。

1 个答案:

答案 0 :(得分:4)

取自this answer by an MCC, MVP

  

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

     

ADO(ADODB)是一个通用(COM)数据库库,可以由Visual Basic和C ++等编程语言使用,以访问已为其开发OLEDB提供程序的任何类型的数据库。在这种情况下,ADO是OLEDB消费者。它与OLEDB Provider进行通信,OLEDB Provider又直接与数据库或数据库服务器通信。

     

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

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?

P.S。一些参考资料:

Microsoft Access Performance Tips to Speed up Your Access Databases

Access connection strings

编辑:取自here: “在2007版本之后,Access包含特定于Office的版本的Jet,最初称为Office Access连接引擎(ACE),但现在称为Access数据库引擎。此引擎完全向后兼容以前版本的Jet它从早期的Access版本读取和写入(.mdb)文件。它引入了一种新的默认文件格式(.accdb),它为Access带来了一些改进,包括复杂数据类型,如多值字段,附件数据类型备忘录字段中的历史记录跟踪。它还带来了安全性和加密改进,并支持与Microsoft Windows SharePoint Services 3.0和Microsoft Office Outlook 2007的集成“

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

“驱动程序不是Windows操作系统的一部分,但可以作为可再发行的。[11]以前,Jet数据库引擎只有32位,并且不能在64位版本的Windows下本机运行。”< / p>

如何通过C#使用MS Access读取this good tutorial 如果向下滚动到标题为“Access(accdb)”的部分,您将看到代码使用ADOX.catalog。

<强> EDIT2: 有关ADOX.Catalog read this的信息 “通过将ActiveConnection属性设置为ADO Connection对象或有效的连接字符串来打开目录。”

所以尝试这样的事情...... Taken from the post underneath the accepted answer by Gord Thompson

ADOX.Catalog cat;
ADOX.Table tbl;

cat.ActiveConnection = _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\Users\Public\Database1.accdb;"