通用数据库访问我的理解是这样子: 建一个数据工厂类 DataAccessFactory ,然后建一个数据访问接口类IDBDataAccess
再建立一个 sql访问的类MSSqlDataAccess和 oracle 访问的类OracleOdbcDataAccess 这两个类均继承自接口IDBDataAccess程序如何调用:
首先new DataAccessFactory() 后取得ConnectionString 和类型
如果是MSSQLServer则
IDBDataAccess db= new MSSqlDataAccess(ConnectionString); 如果是OracleOdbcDataAccess则
IDBDataAccess db= new OracleOdbcDataAccess(ConnectionString);更换数据库时只须改一下Web.Config文件即可.
在每个业务层上只须加三行代码就可以实现通用访问:
DataAccessFactory df= new DataAccessFactory() ;
IDBDataAccess db= new MSSqlDataAccess(ConnectionString); 根据df对象创建相应的对象, 默认是sql
db.ExecuteNonQuery("在这里写sql语句");
通用数据访问给我的想法是:
1、可能会降低访问速度,也就是影响性能,这种方法能否应用在大型的项目开发中?
2、须事先写好访问SQL和ORACLE的方法
我刚接触aps.net开发,有哪里说的不对的请高手多多指教!不知各位大哥大姐们在开发中数据库访问是如何做的?给点思路我学习一个可以吗?最好给些代码或例子。
再建立一个 sql访问的类MSSqlDataAccess和 oracle 访问的类OracleOdbcDataAccess 这两个类均继承自接口IDBDataAccess程序如何调用:
首先new DataAccessFactory() 后取得ConnectionString 和类型
如果是MSSQLServer则
IDBDataAccess db= new MSSqlDataAccess(ConnectionString); 如果是OracleOdbcDataAccess则
IDBDataAccess db= new OracleOdbcDataAccess(ConnectionString);更换数据库时只须改一下Web.Config文件即可.
在每个业务层上只须加三行代码就可以实现通用访问:
DataAccessFactory df= new DataAccessFactory() ;
IDBDataAccess db= new MSSqlDataAccess(ConnectionString); 根据df对象创建相应的对象, 默认是sql
db.ExecuteNonQuery("在这里写sql语句");
通用数据访问给我的想法是:
1、可能会降低访问速度,也就是影响性能,这种方法能否应用在大型的项目开发中?
2、须事先写好访问SQL和ORACLE的方法
我刚接触aps.net开发,有哪里说的不对的请高手多多指教!不知各位大哥大姐们在开发中数据库访问是如何做的?给点思路我学习一个可以吗?最好给些代码或例子。
解决方案 »
- 如何实现silverlight数据导出到EXCEL。
- 求助,关于导出EXCEL数据格式的问题
- 下面的网站的技术十分先进,大家有没有获得这个技术的良好策略
- 天气预报代码 asp.net
- 求OSWorkFlow .net版本源代码
- 为什么我在用JQUERY的AJAX的GET方法做无刷新更新数据时,为什么有时候可以更新数据有时候提示更新成功了,但数据库中没更新成功.
- 急急急 怎样将OWC11.dll放入GAC中
- 如何隐藏 网页中播放文件的地址阿???
- 请大家帮忙!
- dropdownlist的一个奇怪问题?
- GridView模板列中DropDownList控件的SelectedIndexChanged中,如何获得这行的主键?
- 二级下拉用哪个Ajax控件比较简便
//引入命名空间
using System.Data.SqlClient;/// <summary>
/// SqlHelper 的摘要说明
/// </summary>
public class SqlHelper
{
private static readonly string sqlcon = ConfigurationManager.ConnectionStrings["enterpriseCon"].ConnectionString; //建立连接方法
public SqlConnection createCon()
{
SqlConnection con = new SqlConnection(sqlcon);
if (con.State != ConnectionState.Open)
con.Open();
return con;
}
//准备command命令
public static void prepareCommand(SqlConnection con, SqlCommand cmd, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] para)
{
//如果数据库连接没有打开 则打开连接
if (con.State != ConnectionState.Open)
{
con.Open();
}
cmd.Connection = con;
cmd.CommandText = cmdText;
if (trans != null)//如果trans存在的话 执行以下命令
{
cmd.Transaction = trans;
}
cmd.CommandText = cmdText;
if (para != null)//如果para不为空 遍历一遍para
{
foreach (SqlParameter pa in para)
{
cmd.Parameters.Add(pa);
}
}
} //从数据库中读取数据源 返回一个SqlDataReader对象
public static SqlDataReader executeReader(string cmdText, CommandType cmdType, SqlParameter[] para)
{
//定义连接
SqlConnection con = new SqlConnection(sqlcon);
//捕获可能发生的异常
try
{
SqlCommand cmd = new SqlCommand();
prepareCommand(con, cmd, null, cmdType, cmdText, para); SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return sdr;
}
catch (Exception)
{
throw;
}
} //更新数据库方法(增加,删除)
public static int executeNonQuery(string cmdText, CommandType cmdType, SqlParameter[] para)
{
using (SqlConnection con = new SqlConnection(sqlcon))
{
try
{
SqlCommand cmd = new SqlCommand();
prepareCommand(con, cmd, null, cmdType, cmdText, para);
int result = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return result;
}
catch (Exception)
{
throw;
}
}
} //取得数据库中一行的值
public static string executeScalar(string cmdText, CommandType cmdType, SqlParameter[] para)
{
using (SqlConnection con = new SqlConnection(sqlcon))
{
try
{
SqlCommand cmd = new SqlCommand();
prepareCommand(con, cmd, null, cmdType, cmdText, para);
string result = Convert.ToString(cmd.ExecuteScalar());
cmd.Parameters.Clear();
return result;
}
catch (Exception)
{ throw;
}
}
} //DataSet
public static DataSet executeDataAdapter(string cmdText,CommandType cmdType,SqlParameter[] para) {
using (SqlConnection con=new SqlConnection(sqlcon))
{
try
{
SqlCommand cmd = new SqlCommand();
prepareCommand(con, cmd, null, cmdType, cmdText, para);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
cmd.Parameters.Clear();
return ds;
}
catch (Exception)
{
throw;
}
}
}
}
//
1、可能会降低访问速度,也就是影响性能,这种方法能否应用在大型的项目开发中?//一定是会影响性能的,因为用到了反射Reflection技术,但这不足以影响在大项目中的应用!
2、须事先写好访问SQL和ORACLE的方法//不需要,只写好你要用的数据库即可,实际上,我们这样做,只是为了以后采用其它数据库方便一些,其实,在已经创建的应用中更换数据库的可能性并不大,而是一开始就决策好了的!
----------------------------------------
你的理由是??2、须事先写好访问SQL和ORACLE的方法
----------------------------------------
这是为什么?你什么不许写任何实现,直接使用接口就可进行其它开发。
写通用数据库访问最主要是解决增加参数问题,MSSqlDataAccess类中,定义一个变量 Cmd,在创建实例时Cmd = new SqlCommand(); 下面是增加参数的代码: #region int
/// <summary>
/// 添加int型的参数。
/// </summary>
/// <param name="ParameterName">参数名称。比如 @UserName</param>
/// <param name="ParameterValue">参数值</param>
public void addNewParameter(string ParameterName, int ParameterValue)
{
Cmd.Parameters.Add(ParameterName, SqlDbType.Int, 4); //添加存储过程的参数
Cmd.Parameters[ParameterName].Value = ParameterValue; //赋值
//设置方向取默认值——输入
}
#endregion #region double
/// <summary>
/// 添加小数参数,double
/// </summary>
/// <param name="ParameterName">参数名称。比如 @UserName</param>
/// <param name="ParameterValue">参数值</param>
public void addNewParameter(string ParameterName, double ParameterValue)
{
Cmd.Parameters.Add(ParameterName, SqlDbType.Float); //添加存储过程的参数
Cmd.Parameters[ParameterName].Value = ParameterValue; //赋值
}
#endregion #region decimal
/// <summary>
/// 添加金额参数,方向是输入(input)。decimal
/// </summary>
/// <param name="ParameterName">参数名称。比如 @UserName</param>
/// <param name="ParameterValue">参数值</param>
public void addNewParameter(string ParameterName, decimal ParameterValue)
{
Cmd.Parameters.Add(ParameterName, SqlDbType.Decimal); //添加存储过程的参数
Cmd.Parameters[ParameterName].Value = ParameterValue; //赋值
}
#endregion #region nvarChar
/// <summary>
/// 添加nvarChar型的参数。方向是输入(input)
/// </summary>
/// <param name="ParameterName">参数名称。比如 @UserName</param>
/// <param name="ParameterValue">参数值</param>
/// <param name="size">参数大小</param>
public void addNewParameter(string ParameterName, string ParameterValue, int size)
{
Cmd.Parameters.Add(ParameterName, SqlDbType.NVarChar, size); //添加存储过程的参数
Cmd.Parameters[ParameterName].Value = ParameterValue; //赋值
}
#endregion
……
……