1: /// <summary>
2: /// 修复连接字符串,将数据库文件相对路径的转换为绝对路径。
3: /// </summary>
4: /// <param name="connectionString">连接字符串的值。</param>
5: /// <returns>返回被修整过的连接字符串,如果无需修整则返回参数原值。</returns>
6: private static string FixConnectionString(string connectionString)
7: {
8: const string DATASOURCE_PATTERN = @"(?<=Data\s+Source\s*=\s*['""]*\s*)\w+[^;'""]+(?=\b)";
9:
10: if(string.IsNullOrEmpty(connectionString))
11: return connectionString;
12:
13: Match match = Regex.Match(connectionString, DATASOURCE_PATTERN, RegexOptions.IgnoreCase | RegexOptions.Singleline);
14: if(!match.Success)
15: return connectionString;
16:
17: if(Path.IsPathRooted(match.Value))
18: return connectionString;
19:
20: string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
21: string dataSource = Path.Combine(directoryName, match.Value);
22:
23: return Regex.Replace(connectionString, DATASOURCE_PATTERN, dataSource, RegexOptions.IgnoreCase | RegexOptions.Singleline);
24: }