这虽然是用java代码实现的,不过用C#实现也是类似的:
1
internal interface IDataFactory {
2
IDbDataParameter CreateParameter();
3
IDbDataAdapter CreateAdapter();
4
IDbConnection CreateConnection();
5
string ConnectionString { set;}
6
}
7![]()
8
//通过这个接口来访问数据库,可以实现对不同数据库的抽象。command通过Conection创建。
9
internal class SqlDataFactory:IDataFactory {
10
public SqlDataFactory() {
11![]()
12
}
13![]()
14
#region IDataFactory Members
15![]()
16
public System.Data.IDbDataParameter CreateParameter() {
17
return new System.Data.SqlClient.SqlParameter();
18
}
19![]()
20
public System.Data.IDbDataAdapter CreateAdapter() {
21
return new System.Data.SqlClient.SqlDataAdapter();
22
}
23![]()
24
public System.Data.IDbConnection CreateConnection() {
25
return new SqlConnection(mConnectionString);
26
}
27
private string mConnectionString;
28![]()
29
public string ConnectionString {
30
set { mConnectionString = value; }
31
}
32![]()
33
#endregion
34
}
35![]()
36
internal class DataFactoryFactory {
37
private DataFactoryFactory() {
38![]()
39
}
40
private static object factoryLock=new object();
41
private static IDataFactory factoryInstance=null;
42
public static IDataFactory GetDataFactory(){
43
//TODO:double lock
44
lock (factoryLock) {
45
if (factoryInstance == null) {
46
factoryInstance = GetFactory();
47
}
48
return factoryInstance;
49
}
50
}
51
private static IDataFactory GetFactory() {
52
string dbType = Config.DbDriverName.ToLower();
53
switch (dbType) {
54
case "system.data.sqlclient":
55
return GetSqlClinetFactory();
56
default:
57
throw new NotSupportedException(string.Format("DbDriver {0} not supported",dbType));
58
}
59
}
60
public static IDataFactory GetSqlClinetFactory() {
61
IDataFactory factory = new SqlServer.SqlDataFactory();
62
factory.ConnectionString = Config.ConnectionString;
63
return factory;
64
}
65
}
66![]()
67
internal class Config {
68
#if DEBUG
69
public static string DbDriverName {
70
get {
71
return "System.Data.SqlClient";
72
}
73
}
74
public static string ConnectionString {
75
get {
76
return "server=(local);initial catalog=test;integrated security=sspi";
77
}
78
}
79
#else
80
public static string DbDriverName {
81
get {
82
return System.Configuration.ConfigurationSettings.AppSettings["DabaBaseType"];
83
}
84
}
85
public static string ConnectionString {
86
get {
87
return System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
88
}
89
}
90
#endif
91![]()
92![]()
internal interface IDataFactory { 2
IDbDataParameter CreateParameter(); 3
IDbDataAdapter CreateAdapter(); 4
IDbConnection CreateConnection(); 5
string ConnectionString { set;} 6
}7

8
//通过这个接口来访问数据库,可以实现对不同数据库的抽象。command通过Conection创建。9
internal class SqlDataFactory:IDataFactory { 10
public SqlDataFactory() { 11

12
} 13

14
#region IDataFactory Members 15

16
public System.Data.IDbDataParameter CreateParameter() { 17
return new System.Data.SqlClient.SqlParameter(); 18
} 19

20
public System.Data.IDbDataAdapter CreateAdapter() { 21
return new System.Data.SqlClient.SqlDataAdapter(); 22
} 23

24
public System.Data.IDbConnection CreateConnection() { 25
return new SqlConnection(mConnectionString); 26
} 27
private string mConnectionString; 28

29
public string ConnectionString { 30
set { mConnectionString = value; } 31
} 32

33
#endregion 34
}35

36
internal class DataFactoryFactory { 37
private DataFactoryFactory() { 38

39
} 40
private static object factoryLock=new object(); 41
private static IDataFactory factoryInstance=null; 42
public static IDataFactory GetDataFactory(){ 43
//TODO:double lock 44
lock (factoryLock) { 45
if (factoryInstance == null) { 46
factoryInstance = GetFactory(); 47
} 48
return factoryInstance; 49
} 50
} 51
private static IDataFactory GetFactory() { 52
string dbType = Config.DbDriverName.ToLower(); 53
switch (dbType) { 54
case "system.data.sqlclient": 55
return GetSqlClinetFactory(); 56
default: 57
throw new NotSupportedException(string.Format("DbDriver {0} not supported",dbType)); 58
} 59
} 60
public static IDataFactory GetSqlClinetFactory() { 61
IDataFactory factory = new SqlServer.SqlDataFactory(); 62
factory.ConnectionString = Config.ConnectionString; 63
return factory; 64
} 65
}66

67
internal class Config { 68
#if DEBUG 69
public static string DbDriverName { 70
get { 71
return "System.Data.SqlClient"; 72
} 73
} 74
public static string ConnectionString { 75
get { 76
return "server=(local);initial catalog=test;integrated security=sspi"; 77
} 78
} 79
#else 80
public static string DbDriverName { 81
get { 82
return System.Configuration.ConfigurationSettings.AppSettings["DabaBaseType"]; 83
} 84
} 85
public static string ConnectionString { 86
get { 87
return System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]; 88
} 89
} 90
#endif 91

92

//app.config或者web.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="DataBaseType" value="SqlServer"/>
<add key="ConnectionString" value="server=.;database=test;integrated security=sspi"/>
</appSettings>
</configuration>


string ConnectionString
浙公网安备 33010602011771号