mysql管理工具dg_C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)...

这是一个C#编写的数据库操作帮助类Db_Helper_DG,支持SQLServer、MySql和Oracle,实现了通用的数据库读写分离、查询结果实体映射ORM功能。包含ExcuteNonQuery、ExecuteScalar和ExecuteReader等方法,用于执行SQL语句和存储过程。
摘要由CSDN通过智能技术生成

1 /*********************************************************2 * CopyRight: QIXIAO CODE BUILDER.3 * Version:4.2.04 * Author:qixiao(柒小)5 * Create:2017-9-26 17:41:426 * Update:2017-9-26 17:41:427 * E-mail: dong@qixiao.me | wd8622088@foxmail.com8 * GitHub:https://github.com/dong666

9 * Personal web site:http://qixiao.me

10 * Technical WebSit:http://www.cnblogs.com/qixiaoyizhan/

11 * Description:12 * Thx , Best Regards ~13 *********************************************************/

14 usingMySql.Data.MySqlClient;15 usingOracle.ManagedDataAccess.Client;16 usingQX_Frame.Bantina.Options;17 usingSystem;18 usingSystem.Collections.Generic;19 usingSystem.ComponentModel;20 usingSystem.Data;21 usingSystem.Data.Common;22 usingSystem.Data.SqlClient;23 usingSystem.Linq;24 usingSystem.Reflection;25

26 namespaceQX_Frame.Bantina27 {28 public abstract classDb_Helper_DG29 {30 #region ConnString 链接字符串声明

31

32 ///

33 ///连接字符串 ConnString_Default 默认,且赋值时会直接覆盖掉读写34 ///

35 private static string _connString =Configs.QX_Frame_Helper_DG_Config.ConnectionString_DB_QX_Frame_Default;36 public static stringConnString_Default37 {38 get { return_connString; }39 set

40 {41 _connString =value;42 ConnString_RW =_connString;43 ConnString_R =_connString;44 }45 }46 ///

47 ///连接字符串 ConnString_RW 读写数据库使用48 ///

49 public static string ConnString_RW =_connString;50 ///

51 ///连接字符串 ConnString_R 读数据库使用52 ///

53 public static string ConnString_R =_connString;54 ///

55 ///DataBaseType Select default:sqlserver56 ///

57 public static Opt_DataBaseType dataBaseType =Configs.QX_Frame_Helper_DG_Config.DataBaseType;58

59 #endregion

60

61 staticDb_Helper_DG()62 {63 //if (string.IsNullOrEmpty(ConnString_RW) || string.IsNullOrEmpty(ConnString_R))64 //{65 //throw new ArgumentNullException("ConnString Can Not Be Null !");66 //}

67 }68

69 #region ExcuteNonQuery 执行sql语句或者存储过程,返回影响的行数---ExcuteNonQuery

70 ///

71 ///执行sql语句或存储过程,返回受影响的行数,不带参数。72 ///

73 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

74 /// sql语句或存储过程名称

75 /// 命令类型 有默认值CommandType.Text

76 /// 返回受影响的行数

77 public static int ExecuteNonQuery(string commandTextOrSpName, CommandType commandType =CommandType.Text)78 {79 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_RW))80 {81 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))82 {83 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType);84 returncmd.DbCommand.ExecuteNonQuery();85 }86 }87 }88 ///

89 ///执行sql语句或存储过程,返回受影响的行数。90 ///

91 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

92 /// sql语句或存储过程名称

93 /// 命令类型 t

94 /// SqlParameter[]参数数组,允许空

95 /// 返回受影响的行数

96 public static int ExecuteNonQuery(string commandTextOrSpName, CommandType commandType, paramsDbParameter[] parms)97 {98 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_RW))99 {100 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))101 {102 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, parms);//参数增加了commandType 可以自己编辑执行方式

103 returncmd.DbCommand.ExecuteNonQuery();104 }105 }106 }107 ///

108 ///执行sql命令,返回受影响的行数。109 ///

110 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

111 /// sql语句或存储过程名称

112 /// 命令类型

113 /// object[]参数数组,允许空

114 /// 返回受影响的行数

115 public static int ExecuteNonQuery(string commandTextOrSpName, CommandType commandType, params object[] obj)116 {117 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_RW))118 {119 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))120 {121 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, obj);//参数增加了commandType 可以自己编辑执行方式

122 returncmd.DbCommand.ExecuteNonQuery();123 }124 }125 }126 #endregion

127

128 #region ExecuteScalar 执行sql语句或者存储过程,执行单条语句,返回单个结果---ScalarExecuteScalar

129 ///

130 ///执行sql语句或存储过程 返回ExecuteScalar (返回自增的ID)不带参数131 ///

132 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

133 /// sql语句或存储过程名称

134 /// 命令类型 有默认值CommandType.Text

135 ///

136 public static object ExecuteScalar(string commandTextOrSpName, CommandType commandType =CommandType.Text)137 {138 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))139 {140 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))141 {142 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType);143 returncmd.DbCommand.ExecuteScalar();144 }145 }146 }147 ///

148 ///执行sql语句或存储过程 返回ExecuteScalar (返回自增的ID)149 ///

150 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

151 /// sql语句或存储过程名称

152 /// 命令类型

153 /// SqlParameter[]参数数组,允许空

154 ///

155 public static object ExecuteScalar(string commandTextOrSpName, CommandType commandType, paramsDbParameter[] parms)156 {157 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))158 {159 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))160 {161 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, parms);162 returncmd.DbCommand.ExecuteScalar();163 }164

165 }166 }167 ///

168 ///执行sql语句或存储过程 返回ExecuteScalar (返回自增的ID)169 ///

170 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

171 /// sql语句或存储过程名称

172 /// 命令类型

173 /// object[]参数数组,允许空

174 ///

175 public static object ExecuteScalar(string commandTextOrSpName, CommandType commandType, params object[] obj)176 {177 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))178 {179 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))180 {181 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, obj);182 returncmd.DbCommand.ExecuteScalar();183 }184 }185 }186 #endregion

187

188 #region ExecuteScalar 执行sql语句或者存储过程,返回DataReader---DaataReader

189 ///

190 ///执行sql语句或存储过程 返回DataReader 不带参数191 ///

192 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

193 /// sql语句或存储过程名称

194 /// 命令类型 有默认值CommandType.Text

195 ///

196 public static DbDataReader ExecuteReader(string commandTextOrSpName, CommandType commandType =CommandType.Text)197 {198 //sqlDataReader不能用using 会关闭conn 导致不能获取到返回值。注意:DataReader获取值时必须保持连接状态

199 SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW);200 DbCommandCommon cmd = newDbCommandCommon(dataBaseType);201 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType);202 returncmd.DbCommand.ExecuteReader(CommandBehavior.CloseConnection);203 }204 ///

205 ///执行sql语句或存储过程 返回DataReader206 ///

207 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

208 /// sql语句或存储过程名称

209 /// 命令类型

210 /// SqlParameter[]参数数组,允许空

211 ///

212 public static DbDataReader ExecuteReader(string commandTextOrSpName, CommandType commandType, paramsDbParameter[] parms)213 {214 //sqlDataReader不能用using 会关闭conn 导致不能获取到返回值。注意:DataReader获取值时必须保持连接状态

215 SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW);216 DbCommandCommon cmd = newDbCommandCommon(dataBaseType);217 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, parms);218 returncmd.DbCommand.ExecuteReader(CommandBehavior.CloseConnection);219 }220 ///

221 ///执行sql语句或存储过程 返回DataReader222 ///

223 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

224 /// sql语句或存储过程名称

225 /// 命令类型

226 /// object[]参数数组,允许空

227 ///

228 public static DbDataReader ExecuteReader(string commandTextOrSpName, CommandType commandType, params object[] obj)229 {230 //sqlDataReader不能用using 会关闭conn 导致不能获取到返回值。注意:DataReader获取值时必须保持连接状态

231 SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW);232 DbCommandCommon cmd = newDbCommandCommon(dataBaseType);233 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, obj);234 returncmd.DbCommand.ExecuteReader(CommandBehavior.CloseConnection);235 }236 #endregion

237

238 #region ExecuteDataTable 执行sql语句或者存储过程,返回一个DataTable---DataTable

239

240 /**241 * Update At 2017-3-2 14:58:45242 * Add the ExecuteDataTable Method into Sql_Helper_DG243 **/

244

245 ///

246 ///执行sql语句或存储过程,返回DataTable不带参数247 ///

248 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

249 /// sql语句或存储过程名称

250 /// 命令类型 有默认值CommandType.Text

251 ///

252 public static DataTable ExecuteDataTable(string commandTextOrSpName, CommandType commandType =CommandType.Text)253 {254 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))255 {256 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))257 {258 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType);259 using (DbDataAdapterCommon da = newDbDataAdapterCommon(dataBaseType, cmd.DbCommand))260 {261 DataSet ds = newDataSet();262 da.Fill(ds);263 if (ds.Tables.Count > 0)264 {265 return ds.Tables[0];266 }267 return default(DataTable);268 }269 }270 }271 }272 ///

273 ///执行sql语句或存储过程,返回DataTable274 ///

275 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

276 /// sql语句或存储过程名称

277 /// 命令类型

278 /// SqlParameter[]参数数组,允许空

279 ///

280 public static DataTable ExecuteDataTable(string commandTextOrSpName, CommandType commandType, paramsDbParameter[] parms)281 {282 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))283 {284 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))285 {286 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, parms);287 using (DbDataAdapterCommon da = newDbDataAdapterCommon(dataBaseType, cmd.DbCommand))288 {289 DataSet ds = newDataSet();290 da.Fill(ds);291 if (ds.Tables.Count > 0)292 {293 return ds.Tables[0];294 }295 return default(DataTable);296 }297 }298 }299 }300 ///

301 ///执行sql语句或存储过程,返回DataTable302 ///

303 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

304 /// sql语句或存储过程名称

305 /// 命令类型

306 /// object[]参数数组,允许空

307 ///

308 public static DataTable ExecuteDataTable(string commandTextOrSpName, CommandType commandType, params object[] obj)309 {310 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))311 {312 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))313 {314 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, obj);315 using (DbDataAdapterCommon da = newDbDataAdapterCommon(dataBaseType, cmd.DbCommand))316 {317 DataSet ds = newDataSet();318 da.Fill(ds);319 if (ds.Tables.Count > 0)320 {321 return ds.Tables[0];322 }323 return default(DataTable);324 }325 }326 }327 }328 #endregion

329

330 #region ExecuteDataSet 执行sql语句或者存储过程,返回一个DataSet---DataSet

331 ///

332 ///执行sql语句或存储过程,返回DataSet 不带参数333 ///

334 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

335 /// sql语句或存储过程名称

336 /// 命令类型 有默认值CommandType.Text

337 ///

338 public static DataSet ExecuteDataSet(string commandTextOrSpName, CommandType commandType =CommandType.Text)339 {340 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))341 {342 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))343 {344 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType);345 using (DbDataAdapterCommon da = newDbDataAdapterCommon(dataBaseType, cmd.DbCommand))346 {347 DataSet ds = newDataSet();348 da.Fill(ds);349 returnds;350 }351 }352 }353 }354 ///

355 ///执行sql语句或存储过程,返回DataSet356 ///

357 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

358 /// sql语句或存储过程名称

359 /// 命令类型

360 /// SqlParameter[]参数数组,允许空

361 ///

362 public static DataSet ExecuteDataSet(string commandTextOrSpName, CommandType commandType, paramsDbParameter[] parms)363 {364 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))365 {366 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))367 {368 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, parms);369 using (DbDataAdapterCommon da = newDbDataAdapterCommon(dataBaseType, cmd.DbCommand))370 {371 DataSet ds = newDataSet();372 da.Fill(ds);373 returnds;374 }375 }376 }377 }378 ///

379 ///执行sql语句或存储过程,返回DataSet380 ///

381 /// 连接字符串,可以自定义,可以以使用SqlHelper_DG.ConnString

382 /// sql语句或存储过程名称

383 /// 命令类型

384 /// object[]参数数组,允许空

385 ///

386 public static DataSet ExecuteDataSet(string commandTextOrSpName, CommandType commandType, params object[] obj)387 {388 using (SqlConnection_WR_Safe conn = newSqlConnection_WR_Safe(dataBaseType, ConnString_R, ConnString_RW))389 {390 using (DbCommandCommon cmd = newDbCommandCommon(dataBaseType))391 {392 PreparCommand(conn.DbConnection, cmd.DbCommand, commandTextOrSpName, commandType, obj);393 using (DbDataAdapterCommon da = newDbDataAdapterCommon(dataBaseType, cmd.DbCommand))394 {395 DataSet ds = newDataSet();396 da.Fill(ds);397 returnds;398 }399 }400 }401 }402 #endregion

403

404 #region ExecuteList Entity 执行sql语句或者存储过程,返回一个List---List

405 public static List ExecuteList(string commandTextOrSpName, CommandType commandType = CommandType.Text) where Entity : class

406 {407 return GetListFromDataSet(ExecuteDataSet(commandTextOrSpName, commandType));408 }409 public static List ExecuteList(string commandTextOrSpName, CommandType commandType, params DbParameter[] parms) where Entity : class

410 {411 return GetListFromDataSet(ExecuteDataSet(commandTextOrSpName, commandType, parms));412 }413 public static List ExecuteList(string commandTextOrSpName, CommandType commandType, params object[] obj) where Entity : class

414 {415 return GetListFromDataSet(ExecuteDataSet(commandTextOrSpName, commandType, obj));416 }417 #endregion

418

419 #region ExecuteEntity 执行sql语句或者存储过程,返回一个Entity---Entity

420 public static Entity ExecuteEntity(string commandTextOrSpName, CommandType commandType = CommandType.Text) where Entity : class

421 {422 return GetEntityFromDataSet(ExecuteDataSet(commandTextOrSpName, commandType));423 }424 public static Entity ExecuteEntity(string commandTextOrSpName, CommandType commandType, params DbParameter[] parms) where Entity : class

425 {426 return GetEntityFromDataSet(ExecuteDataSet(commandTextOrSpName, commandType, parms));427 }428 public static Entity ExecuteEntity(string commandTextOrSpName, CommandType commandType, params object[] obj) where Entity : class

429 {430 return GetEntityFromDataSet(ExecuteDataSet(commandTextOrSpName, commandType, obj));431 }432 #endregion

433

434 #region ---PreparCommand 构建一个通用的command对象供内部方法进行调用---

435 ///

436 ///不带参数的设置sqlcommand对象437 ///

438 /// sqlconnection对象

439 /// sqlcommmand对象

440 /// sql语句或存储过程名称

441 /// 语句的类型

442 private static void PreparCommand(DbConnection conn, DbCommand cmd, stringcommandTextOrSpName, CommandType commandType)443 {444 //打开连接

445 if (conn.State !=ConnectionState.Open)446 {447 conn.Open();448 }449

450 //设置SqlCommand对象的属性值

451 cmd.Connection =conn;452 cmd.CommandType =commandType;453 cmd.CommandText =commandTextOrSpName;454 cmd.CommandTimeout = 60;455 }456 ///

457 ///设置一个等待执行的SqlCommand对象458 ///

459 /// sqlconnection对象

460 /// sqlcommmand对象

461 /// sql语句或存储过程名称

462 /// 语句的类型

463 /// 参数,sqlparameter类型,需要指出所有的参数名称

464 private static void PreparCommand(DbConnection conn, DbCommand cmd, string commandTextOrSpName, CommandType commandType, paramsSqlParameter[] parms)465 {466 //打开连接

467 if (conn.State !=ConnectionState.Open)468 {469 conn.Open();470 }471

472 //设置SqlCommand对象的属性值

473 cmd.Connection =conn;474 cmd.CommandType =commandType;475 cmd.CommandText =commandTextOrSpName;476 cmd.CommandTimeout = 60;477

478 if (parms != null)479 {480 cmd.Parameters.Clear();481 cmd.Parameters.AddRange(parms);482 }483 }484 ///

485 ///PreparCommand方法,可变参数为object需要严格按照参数顺序传参486 ///之所以会用object参数方法是为了我们能更方便的调用存储过程,不必去关系存储过程参数名是什么,知道它的参数顺序就可以了 sqlparameter必须指定每一个参数名称487 ///

488 /// sqlconnection对象

489 /// sqlcommmand对象

490 /// sql语句或存储过程名称

491 /// 语句的类型

492 /// 参数,object类型,需要按顺序赋值

493 private static void PreparCommand(DbConnection conn, DbCommand cmd, string commandTextOrSpName, CommandType commandType, params object[] parms)494 {495 //打开连接

496 if (conn.State !=ConnectionState.Open)497 {498 conn.Open();499 }500

501 //设置SqlCommand对象的属性值

502 cmd.Connection =conn;503 cmd.CommandType =commandType;504 cmd.CommandText =commandTextOrSpName;505 cmd.CommandTimeout = 60;506

507 cmd.Parameters.Clear();508 if (parms != null)509 {510 cmd.Parameters.AddRange(parms);511 }512 }513 #endregion

514

515 #region 通过Model反射返回结果集 Model为 Entity 泛型变量的真实类型---反射返回结果集

516 ///

517 ///反射返回一个List T 类型的结果集518 ///

519 /// Model中对象类型

520 /// DataSet结果集

521 ///

522 public static List GetListFromDataSet(DataSet ds) where Entity : class

523 {524 List list = new List();//实例化一个list对象

525 PropertyInfo[] propertyInfos = typeof(Entity).GetProperties(); //获取T对象的所有公共属性

526

527 DataTable dt = ds.Tables[0]; //获取到ds的dt

528 if (dt.Rows.Count > 0)529 {530 //判断读取的行是否>0 即数据库数据已被读取

531 foreach (DataRow row indt.Rows)532 {533 Entity model1 = System.Activator.CreateInstance();//实例化一个对象,便于往list里填充数据

534 foreach (PropertyInfo propertyInfo inpropertyInfos)535 {536 try

537 {538 //遍历模型里所有的字段

539 if (row[propertyInfo.Name] !=System.DBNull.Value)540 {541 //判断值是否为空,如果空赋值为null见else

542 if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))543 {544 //如果convertsionType为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换

545 NullableConverter nullableConverter = newNullableConverter(propertyInfo.PropertyType);546 //将convertsionType转换为nullable对的基础基元类型

547 propertyInfo.SetValue(model1, Convert.ChangeType(row[propertyInfo.Name], nullableConverter.UnderlyingType), null);548 }549 else

550 {551 propertyInfo.SetValue(model1, Convert.ChangeType(row[propertyInfo.Name], propertyInfo.PropertyType), null);552 }553 }554 else

555 {556 propertyInfo.SetValue(model1, null, null);//如果数据库的值为空,则赋值为null

557 }558 }559 catch(Exception)560 {561 propertyInfo.SetValue(model1, null, null);//如果数据库的值为空,则赋值为null

562 }563 }564 list.Add(model1);//将对象填充到list中

565 }566 }567 returnlist;568 }569 ///

570 ///反射返回一个T类型的结果571 ///

572 /// Model中对象类型

573 /// SqlDataReader结果集

574 ///

575 public static Entity GetEntityFromDataReader(DbDataReader reader) where Entity : class

576 {577 Entity model = System.Activator.CreateInstance(); //实例化一个T类型对象

578 PropertyInfo[] propertyInfos = model.GetType().GetProperties(); //获取T对象的所有公共属性

579 using(reader)580 {581 if(reader.Read())582 {583 foreach (PropertyInfo propertyInfo inpropertyInfos)584 {585 //遍历模型里所有的字段

586 if (reader[propertyInfo.Name] !=System.DBNull.Value)587 {588 //判断值是否为空,如果空赋值为null见else

589 if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))590 {591 //如果convertsionType为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换

592 NullableConverter nullableConverter = newNullableConverter(propertyInfo.PropertyType);593 //将convertsionType转换为nullable对的基础基元类型

594 propertyInfo.SetValue(model, Convert.ChangeType(reader[propertyInfo.Name], nullableConverter.UnderlyingType), null);595 }596 else

597 {598 propertyInfo.SetValue(model, Convert.ChangeType(reader[propertyInfo.Name], propertyInfo.PropertyType), null);599 }600 }601 else

602 {603 propertyInfo.SetValue(model, null, null);//如果数据库的值为空,则赋值为null

604 }605 }606 return model;//返回T类型的赋值后的对象 model

607 }608 }609 return default(Entity);//返回引用类型和值类型的默认值0或null

610 }611 ///

612 ///反射返回一个T类型的结果613 ///

614 /// Model中对象类型

615 /// DataSet结果集

616 ///

617 public static Entity GetEntityFromDataSet(DataSet ds) where Entity : class

618 {619 return GetListFromDataSet(ds).FirstOrDefault();620 }621 #endregion

622 }623 /**624 * author:qixiao625 * time:2017-9-18 18:02:23626 * description:safe create sqlconnection support627 **/

628 internal classSqlConnection_WR_Safe : IDisposable629 {630 ///

631 ///SqlConnection632 ///

633 public DbConnection DbConnection { get; set; }634

635 public SqlConnection_WR_Safe(Opt_DataBaseType dataBaseType, stringConnString_RW)636 {637 this.DbConnection =GetDbConnection(dataBaseType, ConnString_RW);638 }639 /**640 * if read db disabled,switchover to read write db immediately641 **/

642 public SqlConnection_WR_Safe(Opt_DataBaseType dataBaseType, string ConnString_R, stringConnString_RW)643 {644 try

645 {646 this.DbConnection =GetDbConnection(dataBaseType, ConnString_R);647 }648 catch(Exception)649 {650 this.DbConnection =GetDbConnection(dataBaseType, ConnString_RW);651 }652 }653

654 ///

655 ///GetDataBase ConnectionString by database type and connection string -- private use656 ///

657 ///

658 ///

659 ///

660 private DbConnection GetDbConnection(Opt_DataBaseType dataBaseType, stringConnString)661 {662 switch(dataBaseType)663 {664 caseOpt_DataBaseType.SqlServer:665 return newSqlConnection(ConnString);666 caseOpt_DataBaseType.MySql:667 return newMySqlConnection(ConnString);668 caseOpt_DataBaseType.Oracle:669 return newOracleConnection(ConnString);670 default:671 return newSqlConnection(ConnString);672 }673 }674 ///

675 ///Must Close Connection after use676 ///

677 public voidDispose()678 {679 if (this.DbConnection != null)680 {681 this.DbConnection.Dispose();682 }683 }684 }685 ///

686 ///Common sqlcommand687 ///

688 internal classDbCommandCommon : IDisposable689 {690 ///

691 ///common dbcommand692 ///

693 public DbCommand DbCommand { get; set; }694 publicDbCommandCommon(Opt_DataBaseType dataBaseType)695 {696 this.DbCommand =GetDbCommand(dataBaseType);697 }698

699 ///

700 ///Get DbCommand select database type701 ///

702 ///

703 ///

704 privateDbCommand GetDbCommand(Opt_DataBaseType dataBaseType)705 {706 switch(dataBaseType)707 {708 caseOpt_DataBaseType.SqlServer:709 return newSqlCommand();710 caseOpt_DataBaseType.MySql:711 return newMySqlCommand();712 caseOpt_DataBaseType.Oracle:713 return newOracleCommand();714 default:715 return newSqlCommand();716 }717 }718 ///

719 ///must dispose after use720 ///

721 public voidDispose()722 {723 if (this.DbCommand != null)724 {725 this.DbCommand.Dispose();726 }727 }728 }729 ///

730 ///DbDataAdapterCommon731 ///

732 internal classDbDataAdapterCommon : DbDataAdapter, IDisposable733 {734 public DbDataAdapter DbDataAdapter { get; set; }735 publicDbDataAdapterCommon(Opt_DataBaseType dataBaseType, DbCommand dbCommand)736 {737 //get dbAdapter

738 this.DbDataAdapter =GetDbAdapter(dataBaseType, dbCommand);739 //provid select command

740 this.SelectCommand =dbCommand;741 }742 privateDbDataAdapter GetDbAdapter(Opt_DataBaseType dataBaseType, DbCommand dbCommand)743 {744 switch(dataBaseType)745 {746 caseOpt_DataBaseType.SqlServer:747 return newSqlDataAdapter();748 caseOpt_DataBaseType.MySql:749 return newMySqlDataAdapter();750 caseOpt_DataBaseType.Oracle:751 return newOracleDataAdapter();752 default:753 return newSqlDataAdapter();754 }755 }756 ///

757 ///must dispose after use758 ///

759 public new voidDispose()760 {761 if (this.DbDataAdapter != null)762 {763 this.DbDataAdapter.Dispose();764 }765 }766 }767 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值