好山好水好风光

横看成岭侧成峰
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

编写针对多种数据库的代码

Posted on 2005-11-02 10:13  小河弯弯  阅读(298)  评论(0)    收藏  举报

这虽然是用java代码实现的,不过用C#实现也是类似的:

 1internal interface IDataFactory { 
 2        IDbDataParameter CreateParameter(); 
 3        IDbDataAdapter CreateAdapter(); 
 4        IDbConnection CreateConnection(); 
 5        string ConnectionString { set;} 
 6    }

 7
 8//通过这个接口来访问数据库,可以实现对不同数据库的抽象。command通过Conection创建。
 9internal 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
36internal 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
67internal 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>