在第二章,主要是底层的针对于数据库的CRUD,包括对于不同类型数据库的可扩展性。
第一步:编写AdoHelper类,用于封装对数据库的操作,能同时支持多个数据库(目前支持SqlServer、Oracle、Access),可扩展支持任何类型的数据库。
下面先进行代码片段分析,分析完毕后将贴出完整代码,代码块1-1:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.OracleClient;
using System.Orm.Common;
namespace System.Orm.DBUtility
{
public class AdoHelper
{
//获取数据库类型
private static string strDbType = CommonUtils.GetConfigValueByKey("dbType").ToUpper();
//将数据库类型转换成枚举类型
public static DatabaseType DbType = DatabaseTypeEnumParse<DatabaseType>(strDbType);
//获取数据库连接字符串
public static string ConnectionString = GetConnectionString("connectionString");
//获取数据库命名参数符号,比如@(SQLSERVER)、:(ORACLE)
public static string DbParmChar = DbFactory.CreateDbParmCharacter();
(剖析Step1 Begin)==================================================
代码块1-1中private static string strDbType = CommonUtils.GetConfigValueByKey("dbType").ToUpper();使用到了CommonUtils.GetConfigValueByKey方法,通过读取传入的dbType字符串,到web.config配置文件中取出所配置的数据库类型,配置文件代码块1-2:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="dbType" value="oracle"/>
<add key="connectionString" value="DataSource=test;UserID=test;Password=123"/>
</appSettings>
<system.web>
<compilation debug="true">
</compilation>
<authentication mode="Windows"/>
</system.web>
</configuration>
下面是CommonUtils.GetConfigValueByKey方法的实现代码块1-3:
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Reflection;
namespace System.Orm.Common
{
public class CommonUtils
{
// <summary>
// 根据传入的Key获取配置文件中的Value值
// </summary>
// <param name="Key"></param>
// <returns></returns>
public static string GetConfigValueByKey(string Key)
{
try
{
return ConfigurationManager.AppSettings[Key].ToString();
}
catch
{
throw new Exception("web.config中 Key=\"" + Key + "\"未配置或配置错误!");
}
}
(剖析Step1 End)==================================================
(剖析Step2 Begin)==================================================
代码块1-1中public static DatabaseType DbType = DatabaseTypeEnumParse<DatabaseType>(strDbType);
这段代码是将在配置文件中取到的数据库类型字符串(比如:oracle)转换成已经定义的枚举类型,这里转换为DatabaseType枚举,DatabaseType代码块1-4:
using System;
using System.Collections.Generic;
using System.Text;
namespace System.Orm.DBUtility
{
// <summary>
// 数据库类型枚举,需要扩展类型可在此添加
// </summary>
public enum DatabaseType
{
SQLSERVER,
ORACLE,
ACCESS,
MYSQL
}
}
然后分析如何将字符串转换成枚举类型,用到DatabaseTypeEnumParse这个方法,代码块1-5:
// <summary>
// 用于数据库类型的字符串枚举转换
// </summary>
// <typeparam name="T"></typeparam>
// <param name="value"></param>
// <returns></returns>
public static T DatabaseTypeEnumParse<T>(string value)
{
try
{
return CommonUtils.EnumParse<T>(value);
}
catch
{
throw new Exception("数据库类型\"" + value + "\"错误,请检查!");
}
}
这里实现枚举转换的功能来自CommonUtils.EnumParse<T>(value);代码块1-6:
// <summary>
// 用于字符串和枚举类型的转换
// </summary>
// <typeparam name="T"></typeparam>
// <param name="value"></param>
// <returns></returns>
public static T EnumParse<T>(string value)
{
try
{
return (T)Enum.Parse(typeof(T), value);
}
catch
{