/
CustomConnectionProviderService.cs
55 lines (51 loc) · 2.64 KB
/
CustomConnectionProviderService.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using DevExpress.DataAccess.ConnectionParameters;
using DevExpress.DataAccess.Sql;
using DevExpress.DataAccess.Wizard.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Xml;
namespace WinEUDSaveReportWithoutConnectionParams {
public class CustomConnectionProviderService : IConnectionProviderService {
public SqlDataConnection LoadConnection(string connectionName) {
SqlDataConnection connection = GetConnectionFromXml(connectionName);
var result = connection != null ? connection : GetFallbackConnection(connectionName);
return result;
}
private SqlDataConnection GetFallbackConnection(string connectionName) {
throw new Exception("Connection was not found!");
//or provide a custom fallback connection
//return new SqlDataConnection(connectionName, new MsSqlConnectionParameters("localhost", "dataBaseName", "userName", "password", MsSqlAuthorizationType.Windows));
}
public string FileName { get; set; } = "connections.xml";
protected SqlDataConnection GetConnectionFromXml(string connectionName) {
SqlDataConnection result = GetConnectionsFromXml(x => x == connectionName).FirstOrDefault();
return result;
}
internal IEnumerable<SqlDataConnection> GetConnectionsFromXml() {
return GetConnectionsFromXml(x => true);
}
IEnumerable<SqlDataConnection> GetConnectionsFromXml(Predicate<string> action) {
var result = new List<SqlDataConnection>();
try {
XmlDocument doc = new XmlDocument();
doc.Load(FileName);
foreach (XmlNode node in doc.SelectNodes("Connections/Connection[Name][ConnectionString]")) {
string connectionName = node["Name"].InnerText;
if (action(connectionName)) {
CustomSqlDataConnection connection = new CustomSqlDataConnection(connectionName,
new CustomStringConnectionParameters(node["ConnectionString"].InnerText));
connection.StoreConnectionNameOnly = true;
result.Add(connection);
}
}
return result;
} catch (Exception ex) {
MessageBox.Show(string.Format("Cannot get connections from '{0}' because of exception:{1}{1}{2}",
FileName, Environment.NewLine, ex.Message));
return new SqlDataConnection[0];
}
}
}
}