我需要在運行時更改數據集連接字符串以指向不同的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