【发布时间】:2013-03-10 17:33:01
【问题描述】:
我有许多具有相同结构的数据库,并且我设计了一个与数据库设计相匹配的数据集。使用在设计时询问并在 app.config 中定义的 connectionStrings 很容易连接到数据库。但是当试图在运行时更改数据库时会出现问题。我找不到任何非反射解决方案来处理它。有没有其他方法可以在运行时动态更改数据集的连接字符串,或者至少创建具有不同连接字符串的数据集!!!
【问题讨论】:
我有许多具有相同结构的数据库,并且我设计了一个与数据库设计相匹配的数据集。使用在设计时询问并在 app.config 中定义的 connectionStrings 很容易连接到数据库。但是当试图在运行时更改数据库时会出现问题。我找不到任何非反射解决方案来处理它。有没有其他方法可以在运行时动态更改数据集的连接字符串,或者至少创建具有不同连接字符串的数据集!!!
【问题讨论】:
您正在使用TableAdapter 填充DataSet,您可以像这样轻松修改TableAdapter 连接字符串:
myTableAdapter.Connection.ConnectionString = connectionString;
希望这会有所帮助:)
【讨论】:
gzaxx 答案将不起作用,仅仅是因为不同的 DBMS 与不同的 ADO.NET 提供程序一起工作,这些提供程序可能彼此兼容,也可能不兼容。它背后有很多理论,我不会在这个文本框中输入所有这些,但您需要了解主要问题是 TableAdapters,而不是 DataTable。您的业务和 UI 层通常只与 DataTables 对话,因为您在创建表列时正确使用了相应的数据类型,所以几乎所有 DBMS 都具有相同的结构。因此,理论上,如果 Typed DataSet 可以提供一种为每个 DataTable 附加多个 Adapter 的方法,那么您可以为您支持的每个 DBMS 添加一个适配器,同时保持 DataTable 结构相同。
我自己不得不在一个有点大的项目中处理这个问题,对我来说唯一可行的解决方案是将我的数据访问分离到一个单独的项目(一个类库)中,然后为我支持的每个 DBMS 创建一个这样的 DLL .希望这可以帮助您开始使用它。
【讨论】: