好山好水好风光

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

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

Posted on 2005-11-02 10:13  小河弯弯  阅读(293)  评论(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>