使用LINQ更改ConnectionString的一部分到XML?

时间:2012-10-17 14:46:44

标签: c# linq-to-xml

如何使用ConnectionString更改LINQ to XML的部分内容。例如,我只想更改以下内容中的Data SourceInitial Catalog值:

  <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);
                } 
            }

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

LINQ to XML只能为您恢复实际的connectionString属性。操作实际的字符串元素超出了LINQ to XML的功能。如果要更改字符串本身,则需要使用其他函数对其进行操作。一种快速的方法可能是将字符串拆分为=和;.您知道具有偶数索引的每个元素都是键,每个奇数索引元素都是一个值。然后,您可以搜索“数据源”和“初始目录”元素,并修改下一个阵列位置中的值。