我正在设计的应用程序必须能够通过网络访问任何 MS 或 Oracle 数据库,必须读取数据库中的所有数据库,列出所有表。
最后,用户必须能够下载整个表格,并将其加载到应用程序中。
用户必须插入一些参数:
- IP地址和端口
- 登录名和密码。
然后他必须选择数据库,然后他必须选择表。
我通过互联网查找了几乎开箱即用的东西,而我发现的最佳结果实际上是 Dapper ( http://code.google.com/p/dapper-dot-net/ )
没有更好的图书馆可以满足我的需求吗?
我正在设计的应用程序必须能够通过网络访问任何 MS 或 Oracle 数据库,必须读取数据库中的所有数据库,列出所有表。
最后,用户必须能够下载整个表格,并将其加载到应用程序中。
用户必须插入一些参数:
然后他必须选择数据库,然后他必须选择表。
我通过互联网查找了几乎开箱即用的东西,而我发现的最佳结果实际上是 Dapper ( http://code.google.com/p/dapper-dot-net/ )
没有更好的图书馆可以满足我的需求吗?
没有图书馆可以满足您的需求。您正在构建一个数据库浏览工具,例如 SSMS,因此 Dapper 只是以动态方式获取数据的一种手段。但是,您可以使用基本的 ADO.NET 轻松完成此操作。这DataTable
是一个非常动态的结构,非常有能力满足您的需求。
事实上,虽然我喜欢IDbConnection
Dapper,但我会争辩说,如果我站在你的立场上,我只会使用 ADO.NET ,因为你可以将交互抽象为只使用接口:IDbCommand
例如。
几点说明:我同意使用 ADO.NET 的想法。回到 SqlConnection 和 ODP.NET 共享的接口。
一些想法:
和
INFORMATION_SCHEMA
谷歌那个。这是针对不同 RDBMS 的标准。
我的猜测是,您可以编写 2 个实现相同抽象类的“混凝土”(请参阅上面的 IoC 链接)......其中抽象类具有“通用逻辑”......但是如果有的话,你就有一个“安全值” 2 个 RDBMS 之间的工作方式完全相同。
但由于您的结果将是动态的,从某种意义上说,您不会提前知道表/列是什么,因此 DataTable 不是一个坏主意。
一个不同的想法是看这个,“动态数据”项目。
http://msdn.microsoft.com/en-us/library/cc488545%28v=vs.100%29.aspx
但我不知道(也许没有)它是否曾经为 Oracle 实现过,可能只是 Sql Server。
在你自己动手之前,我建议你看看微软企业图书馆数据访问应用程序块;它建立在 ADO.Net 之上,但提供了一个与数据库无关的 API 供应用程序编写代码。我已经将它用于 Sql Server 和 Oracle。
我终于找到了使用 DbProviderFactory 的快乐。
我创建了一个创建连接字符串的类,它具有返回连接的不变名称的属性(例如:“System.Data.SqlClient”)。
我以这种方式使用这个不变的名称和这个连接字符串:
this.Factory = DbProviderFactories.GetFactory(connexionStringBuilder.InvariantName);
this.Connection = Factory.CreateConnection();
Connection.ConnectionString = connexionStringBuilder.ConnexionString;
然后,我拥有过去的所有 ADO.Net 查询。