因为项目需求,需要项目同时可以访问三个数据库,因此本人经过一番研究,得出以下代码。
1.建立公共连接抽象类(DataBase)
1 public abstract class DataBase 2 { 3 ///4 /// 5 /// 6 public abstract string ConnectionString { get; } 7 8 /// 9 /// 10 /// 11 /// 12 /// 13 /// 14 /// 15 /// 16 17 public DbParameter CreateParameter(DbCommand cmd, String pName, Object value, System.Data.DbType type) 18 { 19 var p = cmd.CreateParameter(); 20 p.ParameterName = pName; 21 p.Value = (value == null ? DBNull.Value : value); 22 p.DbType = type; 23 return p; 24 } 25 /// 26 /// 27 /// 28 /// 29 public abstract DbConnection CreateConnection(); 30 /// 31 /// 返回List 32 /// 33 /// 34 /// 35 /// 36 /// 37 public List Select (string sql, Object paramObject = null) 38 { 39 40 try 41 { 42 using (DbConnection conn = CreateConnection()) 43 { 44 conn.Open(); 45 var list = Dapper.SqlMapper.Query (conn, sql, paramObject); 46 return list.ToList (); 47 } 48 49 } 50 catch (Exception ex) 51 { 52 Logs.Write(LogType.Error, ex.Message,this.GetType()); 53 return null; 54 } 55 } 56 /// 57 /// 返回List 58 /// 59 /// 60 /// 表名 61 /// 62 /// 63 public List Select () 64 { 65 try 66 { 67 using (DbConnection conn = CreateConnection()) 68 { 69 conn.Open(); 70 var list = Dapper.SqlMapper.Query (conn, "SELECT * FROM " + typeof(T).Name, null); 71 return list.ToList (); 72 } 73 } 74 catch (Exception ex) 75 { 76 Logs.Write(LogType.Error, ex.Message, this.GetType()); 77 return null; 78 } 79 } 80 public int Insert (T t) 81 { 82 try 83 { 84 using (DbConnection conn = CreateConnection()) 85 { 86 conn.Open(); 87 var id = conn.Insert(t); 88 return id ?? 0; 89 } 90 } 91 catch (Exception ex) 92 { 93 Logs.Write(LogType.Error, ex.Message, this.GetType()); 94 return -1; 95 } 96 } 97 public int Delete (T t) 98 { 99 try 100 { 101 using (DbConnection conn = CreateConnection()) 102 { 103 conn.Open(); 104 return conn.Delete(t); 105 } 106 } 107 catch (Exception ex) 108 { 109 Logs.Write(LogType.Error, ex.Message, this.GetType()); 110 return -1; 111 } 112 } 113 public int Update (T t) 114 { 115 try 116 { 117 using (DbConnection conn = CreateConnection()) 118 { 119 conn.Open(); 120 return conn.Update(t); 121 } 122 } 123 catch (Exception ex) 124 { 125 Logs.Write(LogType.Error, ex.Message, this.GetType()); 126 return -1; 127 } 128 } 129 public string InsertByGuid (T t) 130 { 131 try 132 { 133 using (DbConnection conn = CreateConnection()) 134 { 135 conn.Open(); 136 return conn.Insert<string,T>(t); 137 } 138 } 139 catch (Exception ex) 140 { 141 Logs.Write(LogType.Error, ex.Message, this.GetType()); 142 return ""; 143 } 144 } 145 public List GetList (string sql, Object paramObject = null) 146 { 147 try 148 { 149 using (DbConnection conn = CreateConnection()) 150 { 151 conn.Open(); 152 return conn.Query (sql, paramObject).ToList(); 153 } 154 } 155 catch (Exception ex) 156 { 157 Logs.Write(LogType.Error, ex.Message, this.GetType()); 158 return null; 159 } 160 } 161 public IEnumerable<dynamic> GetList(string sql, Object paramObject = null) 162 { 163 try 164 { 165 using (DbConnection conn = CreateConnection()) 166 { 167 conn.Open(); 168 return conn.Query(sql, paramObject); 169 } 170 } 171 catch (Exception ex) 172 { 173 Logs.Write(LogType.Error, ex.Message, this.GetType()); 174 return null; 175 } 176 } 177 /// 178 /// 179 /// 180 /// 181 /// 182 /// 183 public List<dynamic> Select(string sql, Object paramObject = null) 184 { 185 DbConnection conn = null; 186 try 187 { 188 conn = CreateConnection(); 189 conn.Open(); 190 var list = Dapper.SqlMapper.Query(conn, sql, paramObject); 191 return list.ToList<dynamic>(); 192 } 193 catch (Exception ex) 194 { 195 Logs.Write(LogType.Error, ex.Message, this.GetType()); 196 return null; 197 } 198 finally 199 { 200 if (conn != null) 201 conn.Close(); 202 } 203 } 204 205 /// 206 /// 获取一条数据 207 /// 208 /// 209 /// 210 /// 211 public dynamic Single(string sql, Object paramObject = null) 212 { 213 DbConnection conn = null; 214 try 215 { 216 conn = CreateConnection(); 217 conn.Open(); 218 var list = Dapper.SqlMapper.QuerySingleOrDefault<dynamic>(conn, sql, paramObject); 219 return list; 220 } 221 catch (Exception ex) 222 { 223 Logs.Write(LogType.Error, ex.Message, this.GetType()); 224 return null; 225 } 226 finally 227 { 228 if (conn != null) 229 conn.Close(); 230 } 231 } 232 233 /// 234 /// 获取一条数据 235 /// 236 /// 237 /// 238 /// 239 /// 240 public T Single (string sql, Object paramObject = null) 241 { 242 243 DbConnection conn = null; 244 try 245 { 246 conn = CreateConnection(); 247 conn.Open(); 248 var list = Dapper.SqlMapper.QuerySingleOrDefault (conn, sql, paramObject); 249 return list; 250 } 251 catch (Exception ex) 252 { 253 Logs.Write(LogType.Error, ex.Message, this.GetType()); 254 return default(T); 255 } 256 finally 257 { 258 if (conn != null) 259 conn.Close(); 260 } 261 } 262 263 /// 264 /// 获取一行一列 265 /// 266 /// 267 /// 268 /// 269 /// 270 public T ExecuteScalar (string sql, Object paramObject = null) 271 { 272 273 DbConnection conn = null; 274 try 275 { 276 conn = CreateConnection(); 277 conn.Open(); 278 T t = Dapper.SqlMapper.ExecuteScalar (conn, sql, paramObject); 279 return t; 280 } 281 catch (Exception ex) 282 { 283 Logs.Write(LogType.Error, ex.Message, this.GetType()); 284 return default(T); 285 } 286 finally 287 { 288 if (conn != null) 289 conn.Close(); 290 } 291 } 292 293 /// 294 /// 返回受影响行数 295 /// 296 /// 297 /// 298 /// 299 public int Execute(string sql, Object paramObject = null) 300 { 301 DbConnection conn = null; 302 try 303 { 304 conn = CreateConnection(); 305 conn.Open(); 306 int count = Dapper.SqlMapper.Execute(conn, sql, paramObject); 307 return count; 308 } 309 catch (Exception ex) 310 { 311 Logs.Write(LogType.Error, ex.Message, this.GetType()); 312 return 0; 313 } 314 finally 315 { 316 if (conn != null) 317 conn.Close(); 318 } 319 } 320 }
2.建立3个不同数据库连接类(OracleDataBase、SqlDataBase、MySqlDataBase)继承(DataBase)类
1 public class OracleDataBase : DataBase 2 { 3 public override string ConnectionString 4 { 5 get 6 { 7 return System.Configuration.ConfigurationManager.ConnectionStrings["OracleConnection"].ToString(); 8 } 9 } 10 ///11 /// 常用 12 /// 13 /// 14 public override DbConnection CreateConnection() 15 { 16 Oracle.ManagedDataAccess.Client.OracleConnection conn = new Oracle.ManagedDataAccess.Client.OracleConnection(ConnectionString); 17 conn.ConnectionString = ConnectionString; 18 return null; 19 } 20 }
1 public class SqlDataBase : DataBase 2 { 3 ///4 /// 5 /// 6 public override string ConnectionString 7 { 8 get 9 { 10 return System.Configuration.ConfigurationManager.ConnectionStrings["SqlConnection"].ToString(); 11 } 12 } 13 /// 14 /// 15 /// 16 /// 17 public override DbConnection CreateConnection() 18 { 19 SqlConnection conn = new SqlConnection(ConnectionString); 20 conn.ConnectionString = ConnectionString; 21 return conn; 22 } 23 24 }
1 public class MySqlDataBase : DataBase 2 { 3 ///4 /// 5 /// 6 public override string ConnectionString 7 { 8 get 9 { 10 return System.Configuration.ConfigurationManager.ConnectionStrings["MySqlConnection"].ToString(); 11 } 12 } 13 /// 14 /// 常用 15 /// 16 /// 17 public override DbConnection CreateConnection() 18 { 19 MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString); 20 return conn; 21 } 22 }
3.访问不同的连接
1 public ListGetList () 2 { 3 var db = new SqlDataBase(); 4 return db.Select (); 5 } 6 public List GetList () 7 { 8 var db = new OracleDataBase(); 9 return db.Select (); 10 } 11 public List GetList () 12 { 13 var db = new MySqlDataBase(); 14 return db.Select (); 15 }
以上代码就是访问不同的数据库的列表信息,其他增删改和上面的差不多写法,如果还有其他问题,请评论!