在运行时为多租户应用程序更改XSD ConnectionString

时间:2009-01-12 13:48:56

标签: string xsd dataset connection multi-tenant

我正在将我们的应用程序从“一组代码和一个数据库”更改为“一组代码到多个数据库(每个客户一个数据库)”。

原始代码是VS2005 ASP.NET(VB)&很多XSD都在一个单独的DLL中。 web.config的ConnectionString将在运行时覆盖存储在DLL中的那个。

现在我需要在每次声明数据适配器/数据集/表时更改ConnectionString,因为调用可能会转到与上次调用不同的数据库。

有人对此有任何暗示吗?

2 个答案:

答案 0 :(得分:6)

经过一番研究,似乎XSD有一个名为ConnectionModifier的属性。

要找到它,请在XSD图上单击图表的TableAdapter部分(定义查询的位置)。

在属性窗口中,将ConnectionModifier更改为Public,然后单击Save。 (这似乎也改变了该页面上所有数据集的属性。)

回到您网站的主要代码,您现在可以执行以下操作:

'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声明内容时都必须传递一个新的连接对象。

答案 1 :(得分:1)

还发现尽管提到的属性(ConnectionModifier)是Public,但当它是QueriesTableAdapter时仍然无法通过代码看到它。因此,我不得不花费一段时间删除这些并用普通的“使用查询”块替换它们。

另外,我确信现在项目似乎更快了。现在所有的调用都可以减小尺寸或者使用“使用”(原始代码在我们的.NET时代早期,因此可能首先编写得更好)。