我需要在运行时更改数据集连接字符串以指向不同的DB。ASP.NET在运行时修改连接字符串
我看了一些解决方案,但他们似乎都与WinForms或web 应用程序项目或其他技术略有不同,因为我使用,所以我还没有想出如何应用它们。
该应用就像一个讨论。这是一个网页网站项目基于最初在VS2005下编写的代码,目前没有预算(或个人天赋!)进行重大更改。该应用程序是用vb.net编写的;我可以理解C#中的答案。我在VS2013工作。
该应用程序有三个类型的数据集指向一个MDF,称之为“MainDB.mdf”。三个数据集中有几十个表适配器。
我打算将该应用程序部署为“alpha/demo”版本。我想为所有用户使用相同的代码库,并为每个用户使用单独的MainDB物理版本,以减少用户互相碰撞的机会。
最初的演示访问URL将包含查询字符串信息,我可以使用它将用户连接到正确的物理数据库文件。我应该能够从查询字符串信息(可能使用通用连接字符串上的替换)中识别数据库名称以及连接字符串参数。如果有必要,我可以使用appsettings来存储完全形成的连接字符串,但是,我想避免这种情况。
我希望能够在访问应用的入口点页面时更改所有数据集的连接字符串。
在tableapters的每个实例化处更改tableadapter连接字符串将需要太多的代码更改(至少有几百个实例化);我只是建立完整的独立网站,而不是这样做。如果我无法在运行时动态更改连接字符串(或学习其他方法来使此通用方案工作),那就是回退位置。
任何关于如何解决这个问题的建议将不胜感激。
谢谢!
UPDATE:每评论,这里是TableAdapter的
Public Shared Sub ClearOperCntrlIfHasThisStaff(_
varSesnID As Integer, varWrkprID As Integer)
Dim TA As GSD_DataSetTableAdapters.OPER_CNTRLTableAdapter
Dim DR As GSD_DataSet.OPER_CNTRLRow
DR = DB.GetOperCntrlRowBySesnID(varSesnID)
If IsNothing(DR) Then
Exit Sub
End If
If DR.AField = varWrkprID Then
DR.AField = -1
TA.Update(DR)
DR.AcceptChanges()
End If
End Sub
UPDATE的样本实例:下面是测试代码,我在测试现场试图修改的connectionString在一个TableAdapter的单实例。它提供了一个简单的gridview。我试着从Page_Load,Page_PreLoad,ObjectDataSource_Init和Gridview_Databind调用它。在最后的response.writes中,wrkNewConnString看起来更改为TestDB2,并且TA.Connection.ConnectionString值看起来更改为TestDB2,但显示的gridview数据仍然来自TestDB1。也许它需要从其他地方调用?
Sub ChangeTableAdapter()
Dim wrkNewConnStr As String = ""
Dim wrkSel As Integer
wrkSel = 2
wrkNewConnStr = wrkNewConnStr & "Data Source=.\SQLEXPRESS;"
wrkNewConnStr = wrkNewConnStr & "AttachDbFilename=D:\9000_TestSite\App_Data\TESTDB1.MDF;Integrated Security=True;User Instance=True"
Select Case wrkSel
Case 1
wrkNewConnStr = wrkNewConnStr.Replace("TESTDB1", "TESTDB1")
Case 2
wrkNewConnStr = wrkNewConnStr.Replace("TESTDB1", "TESTDB2")
Case 3
wrkNewConnStr = "Data Source=localhost; Initial Catalog=test01;"
wrkNewConnStr = wrkNewConnStr & " User ID=testuser1; Password=testuserpw1"
End Select
Try
Dim TA As New DataSetTableAdapters.NamesTableAdapter
TA.Connection.ConnectionString = wrkNewConnStr
Response.Write("1 - " & wrkNewConnStr)
Response.Write("<br/>")
Response.Write("2 - " & TA.Connection.ConnectionString)
Catch ex As Exception
Dim exmsg As String = ex.Message
Response.Write(exmsg)
End Try
End Sub
连接字符串:
<add name="TestDB1ConnectionString"
connectionString="Data Source=.\SQLEXPRESS;
AttachDbFilename=D:\9000_TestSite\App_Data\TESTDB1.MDF;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
更新:下面的帖子有很多的解决方案,但是,他们似乎把重点放在Web应用程序项目,即与设置的项目文件,而本网站现场项目没有。
UPDATE:这下一个环节被带到了我的注意,并在它的工作我没有得到它的工作,但是,它仍然依赖或者在具有Web应用程序项目(含项目文件)或在实例化时修改每个表适配器。所以,虽然我不打算实施它,但我相信这是技术上的答案。
看看适配器模式,你的问题是简单,所以是解决 – Dalorzo
_(改变在tableapters的每个实例TableAdapter的连接字符串需要太多的代码改变(至少几百实例))_你能否给我们提供一个代码示例?适配器现在如何初始化? –
使用tableadapter添加到原始文章 – wayfarer