C# 使用OleDB需要什么?

C# 使用OleDB需要什么?,c#,oledb,C#,Oledb,我对使用OleDB的要求感到困惑 在应用程序中,我使用OleDB读取XLS文件。之后,我用ClickOnce(Visual Stuido 2012,.NET 4.0)发布了我的项目。但是,该应用程序能否在只安装了.NET 4.0的Windows系统上运行?或者其他人是否因为OleDB的内部使用而必须安装MS Office?OleDB是用于访问数据源的API 要使用它,您需要一个OLE DB提供程序 OLE DB提供程序只是一个COM对象 您的计算机上可能已经注册了许多OLE DB提供程序CO

我对使用OleDB的要求感到困惑


在应用程序中,我使用OleDB读取XLS文件。之后,我用ClickOnce(Visual Stuido 2012,.NET 4.0)发布了我的项目。但是,该应用程序能否在只安装了.NET 4.0的Windows系统上运行?或者其他人是否因为OleDB的内部使用而必须安装MS Office?

OleDB是用于访问数据源的API

  • 要使用它,您需要一个OLE DB提供程序
  • OLE DB提供程序只是一个COM对象
您的计算机上可能已经注册了许多OLE DB提供程序COM类:

| Name                                                         | VersionIndependentProgID            | ProgID                   | clsid                                  |
|--------------------------------------------------------------|-------------------------------------|--------------------------|----------------------------------------|
| Microsoft OLE DB Provider for SQL Server                     | SQLOLEDB                            | SQLOLEDB.1               | {0C7FF16C-38E3-11d0-97AB-00C04FC2AD98} |
| Microsoft OLE DB Provider for Analysis Services 9.0          | MSOLAP                              | MSOLAP.3                 | {176941F9-18E8-47D6-860D-006FF2655608} |
| Microsoft OLE DB Provider For Data Mining Services           | MSDMine                             | MSDMine.1                | {2CB6C2D3-DD7C-11D2-AFE4-00105A994724} |
| MSDataShape                                                  | MSDataShape                         | MSDataShape.1            | {3449A1C8-C56C-11D0-AD72-00C04FC29863} |
| SQL Server Native Client 11.0                                | SQLNCLI11                           | SQLNCLI11.1              | {397C2819-8272-4532-AD3A-FB5E43BEAA39} |
| Microsoft.WINDOWS.SQLLITE.OLEDB.4.0                          |                                                                | {3A5B4772-7946-4E58-9310-B0D423749C1D} |
| Microsoft Office 12.0 Access Database Engine OLE DB Provider |                                     | Microsoft.ACE.OLEDB.12.0 | {3BE786A0-0366-4F5C-9434-25CF162E475E} |
| OLE DB Provider for Microsoft Directory Services             |                                     | ADsDSOObject             | {549365d0-ec26-11cf-8310-00aa00b505db} |
| Microsoft OLE DB Provider for Search                         | Search.CollatorDSO                  | Search.CollatorDSO.1     | {9E175B8B-F52A-11D8-B9A5-505054503030} |
| Microsoft OLE DB Provider for OLAP Services 8.0              | MSOLAP                              | MSOLAP.2                 | {A07CCD0C-8148-11D0-87BB-00C04FC33942} |
| Microsoft OLE DB Provider for ODBC Drivers                   | MSDASQL                             | MSDASQL.1                | {c8b522cb-5cf3-11ce-ade5-00aa0044773d} |
| Microsoft Jet 4.0 OLE DB Provider                            | Microsoft.Jet.OLEDB                 | Microsoft.Jet.OLEDB.4.0  | {dee35070-506b-11cf-b1aa-00aa00b8de95} |
| Microsoft OLE DB Simple Provider                             | MSDAOSP                             | MSDAOSP.1                | {dfc8bdc0-e378-11d0-9b30-0080c7e9fe95} |
| Microsoft OLE DB Provider for Oracle                         | MSDAORA                             | MSDAORA.1                | {e8cc4cbe-fdff-11d0-b865-00a0c9081c1d} |
OLEDBAPI是相当痛苦的 OLE DB的API界面过于复杂;有人说:

//Create an SQL Server OLEDB Provider
IDBInitialize db = CreateComObject("SQLOLEDB");
db.Initialize();

IDBCreateCommand createCommand = (dataSource as IDBCreateSession).CreateSession(IDBCreateCommand);


ICommandText commandText = createCommand.CreateCommand();
commandText.CommandText = "SELECT 'Hello, world!'";
IRowSet rs = commandText.Execute();
阿多让事情变得容易了 OLE DB是一个非常复杂的API。ADO的出现使事情变得容易多了

Connection conn = new Connection();
conn.ConnectionString = connectionString;
conn.Open();

Recordset rs = new Recordset();
rs.ActiveConnection = conn;
rs.CommandText = "SELECT 'Hello, world!'";
rs.Open();
ADO.net可以使用OLEDB提供程序 所有这些都使用OLEDB 这些都是使用OLEDB的代码示例(从内存动态编写)

重要的是,您必须知道您想要哪个oledb提供商

  • SQL Server
    SQLOLEDB
    (随Windows提供)
  • SQL Server(本机客户端)
    SQLNCLI
    (原始版本,已弃用)
  • SQL Server(本机客户端)
    SQLNCLI10
    (版本10,已弃用)
  • SQL Server(本机客户端)
    SQLNCLI11
    (版本11,已弃用)
  • SQL Server
    MSOLEDBSQL
    (随SQL Server提供)
  • Windows搜索
    Search.CollatorDSO
  • Jet
    Microsoft.Jet.OLEDB
一旦你知道你想要什么提供者,你就有了它

回答问题 使用OLEDB需要什么

  • 提供商
  • 你必须使用它

它在13年前就被弃用了。但我的Windows 8.1计算机仍然预装了c:\Windows\syswow64\msjetoledb40.dll。微软必须永远铭记他们所犯的每一个错误:)@HansPassant谢谢。我不知道它被弃用了,所以我想知道当前读取XLS文件的“标准”方式是什么?因为microsoft Excel从专有的.XLS格式改为更开放的标准格式.xlsx,所以有各种库和工具支持处理Excel文件。但仍然需要OleDB来处理xls文件。
DbConnection conn = new OleDbConnection();
conn.ConnectionString = connectionString;
conn.Open();

DbCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT 'Hello, world!'";
IDataReader rdr = cmd.ExecuteReader();