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