0

如何更改 a 的一部分ConnectionStringwith 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);
                } 
            }
4

2 回答 2

1

请参考文档:

http://msdn.microsoft.com/en-us/library/bb387061.aspx

于 2012-10-17T14:48:59.400 回答
1

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

于 2012-10-17T14:52:00.713 回答