我正在将我们的应用程序从“一套代码和一个数据库”更改为“一套代码对多个数据库(每个客户一个数据库)”。原始代码是VS2005 ASP.NET(VB),并且在单独的DLL中有许多XSD。Web.config的ConnectionString会在运行时覆盖存储在DLL中的ConnectionString。现在,每次声明数据适配器/数据集/表时都需要更改ConnectionString,因为调用可能会从上次调用的不同数据库中进行。有人有任何提示吗?
经过一番调查,似乎XSD有一个名为ConnectionModifier的属性。
要找到它,在XSD图表上,单击图表的TableAdapter部分(其中定义了查询)。
在属性窗口中,将ConnectionModifier更改为Public并单击保存。(这似乎也会更改该页面上所有数据集的属性。)
回到您网站的主要代码,现在可以像这样进行操作:
'declare the adapter as normal
Dim AdapterTest As New DataSetTestTableAdapters.TestTableAdapter
'pass the new connection object into the now visible property
AdapterTest.Connection = New Data.SqlClient.SqlConnection("Data Source=Myserver;Initial Catalog=TEST;Integrated Security=True;")
只需要一个连接对象。
我还没有进行过适当的测试!不幸的是,每次从XSD声明某些内容时都必须传递一个新的连接对象。
我还发现,虽然提到的属性(ConnectionModifier)是公共的,但当它是QueriesTableAdapter时,在代码中仍然看不到它。因此,我不得不花费相当长的时间将其删除并用普通的“Using Query”块替换。
另外,我确定项目现在似乎更快了。这可能是因为减少了大小或现在使用了“Using”来调用所有内容(原始代码是我们的.NET早期版本,因此一开始就应该编写得更好)。