2012-10-17 24 views
0

如何更換ConnectionString的一部分與LINQ to XML。舉例來說,我只是想改變在下面的Data SourceInitial Catalog值:將LINQ to XML轉換爲ConnectionString的一部分?

<connectionStrings> 
    <add name="connStr" connectionString="Data Source=data-source;Initial Catalog=db;User ID=user;Password=pass" providerName="System.Data.SqlClient;MultipleActiveResultSets=true;" /> 
    </connectionStrings> 

我知道如何改變整個的connectionString屬性,但我不想這樣做,我只希望更改某些部分。

我使用下面的代碼來修改連接字符串的部分和大部分它的工作,但我如何修改它,以便它不會刪除不由;providerName分隔的屬性/值這個案例。

string[] connArr = connectionString.Value.Split(';'); 

      for (int i = 0; i < connArr.Length; i++) 
      { 
       //Get the attribute and the value splitted by the "=" 
       string[] arrSubConn = connArr[i].Split('='); 

       if (arrSubConn.Length == 2) 
       { 
        string connAttr = arrSubConn[0]; 
        string connVal = arrSubConn[1]; 

        //Change the server name 
        if (connAttr == "Data Source") 
         connVal = environmentSettings.Server; 


        //Change the database name 
        if (connAttr == "Initial Catalog") 
         connVal = environmentSettings.Database; 

        newConnString += String.Format("{0}={1};", connAttr, connVal); 
       } 
      } 
+0

如果您需要處理providerName,請執行雙分割,首先使用分號然後使用equals。這會給你一個數組的數組。然後,您可以使用Where子句攻擊那些包含雙元素子數組的數組。 –

回答

1

的LINQ to XML將只能夠收回的實際的connectionString屬性爲您服務。對實際字符串元素的操作超出了LINQ to XML的功能。如果你想改變字符串本身,你將需要使用其他函數來操作它。一個快速的方法可能是將字符串拆分爲=和;。你知道每個具有偶數索引的元素都是一個鍵,每個奇數索引元素都是一個值。然後您可以搜索數據源和初始目錄元素並修改下一個陣列位置中的值。

+0

你能否詳細說明這些其他功能? – Xaisoft

+0

需要更多信息? (如果需要,隨意說出口!) –

1
+0

我瞭解如何更改整個屬性,但不確定是否可以更改屬性的一部分。 – Xaisoft

+0

可以,但必須手動完成,方法是使用LinqToSQL獲取整個屬性值,然後將其分爲';'和'=',然後改變它,然後把它放回去。 –

+0

啊,有一種感覺,我可能必須這樣做。 – Xaisoft