C# 访问随机SQL server
我设计的应用程序必须能够通过网络访问任何MS或Oracle数据库,必须读取数据库中的所有数据库,列出所有表 最后,用户必须能够下载整个表,并将其加载到应用程序中 用户必须插入一些参数:C# 访问随机SQL server,c#,sql-server,oracle,C#,Sql Server,Oracle,我设计的应用程序必须能够通过网络访问任何MS或Oracle数据库,必须读取数据库中的所有数据库,列出所有表 最后,用户必须能够下载整个表,并将其加载到应用程序中 用户必须插入一些参数: Ip地址和端口 登录名和密码 然后他必须选择数据库,然后他必须选择表 我在网上查了一下,找到了一些几乎是开箱即用的东西,我发现最好的结果实际上是简洁() 没有更好的图书馆能满足我的需要吗?没有能满足你需要的图书馆。您正在构建一个数据库浏览工具,如SSMS,因此Dapper只是以动态方式获取数据的一种手段。但是,您
DataTable
是一个非常动态的结构,能够满足您的需要
事实上,尽管我爱整洁,但我认为如果我站在你的立场上,我只会使用ADO.NET,因为你可以将你的交互抽象为只使用接口:IDbConnection
和IDbCommand
。没有任何库可以满足你的需要。您正在构建一个数据库浏览工具,如SSMS,因此Dapper只是以动态方式获取数据的一种手段。但是,您可以使用基本的ADO.NET轻松地完成此操作。DataTable
是一个非常动态的结构,能够满足您的需要
事实上,尽管我爱整洁,但我认为如果我站在你的立场上,我只会使用ADO.NET,因为你可以将你的交互抽象为只使用接口:IDbConnection
和IDbCommand
。一些注意事项:
我同意使用ADO.NET的想法。回到SqlConnection和ODP.NET共享的接口
一些想法:
及
谷歌。这就是不同RDBMS的标准
我的猜测是,您可以编写两个实现相同抽象类的“具体化”(参见上面的IoC链接)。。。其中抽象类有“公共逻辑”…但是如果两个RDBMS之间的工作方式完全相同,那么就有一个“安全值”
但是由于您的结果是动态的,从某种意义上说,您不会提前知道表/列是什么,因此数据表不是一个坏主意
另一个想法是看这个“动态数据”项目
但我不知道(也许不是)这是否为Oracle实现过,可能只是Sql Server。一些注意事项:
我同意使用ADO.NET的想法。回到SqlConnection和ODP.NET共享的接口
一些想法:
及
谷歌。这就是不同RDBMS的标准
我的猜测是,您可以编写两个实现相同抽象类的“具体化”(参见上面的IoC链接)。。。其中抽象类有“公共逻辑”…但是如果两个RDBMS之间的工作方式完全相同,那么就有一个“安全值”
但是由于您的结果是动态的,从某种意义上说,您不会提前知道表/列是什么,因此数据表不是一个坏主意
另一个想法是看这个“动态数据”项目
但我不知道(也许不是)这是否为Oracle实现过,可能只是Sql Server。在您开始自己的应用程序之前,我建议您先看看Microsoft企业库数据访问应用程序块;它构建在ADO.Net上,但为应用程序提供了一个与数据库无关的API来进行编码。我用它来对付Sql Server和Oracle
在您开始自己的应用程序之前,我建议您先看看Microsoft企业库数据访问应用程序块;它构建在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查询。我终于使用DbProviderFactory找到了快乐 我创建了一个类,该类创建连接字符串,并具有返回连接的不变名称的属性(例如:“System.Data.SqlClient”) 我以这种方式使用此不变名称和此连接字符串:
this.Factory = DbProviderFactories.GetFactory(connexionStringBuilder.InvariantName);
this.Connection = Factory.CreateConnection();
Connection.ConnectionString = connexionStringBuilder.ConnexionString;
然后,我有我过去使用过的所有ADO.Net查询。有什么原因不能使用
DbConnection
/DbCommand
以及System.Data
命名空间中的类似命令吗?不知道你为什么会提到Dapper
,这是一种ORM,与你的要求是正交的。所有这些都可以通过SQL Server SMO来实现,至少对于SQL Server数据库是如此。@AnnL.,yes和no。no。因为OP需要能够连接到Oracle。@Oded,并不是有意重复你所做的事情。我想我们只是在想同样的话D@neoistheone-没问题-伟大的头脑等等;)有什么原因不能使用DbConnection
/DbCommand
以及System.Data
命名空间中的类似命令吗?不知道你为什么会提到Dapper
,这是一种ORM,与你的要求是正交的。所有这些都可以通过SQL Server SMO来实现,至少对于SQL Server数据库是如此。@AnnL.,yes和no。no。因为OP需要能够连接到Oracle。@Oded,并不是有意重复你所做的事情。我想我们的想法是一样的D