读书人

数据库访问底层(DAL)的设计~贴者有分,

发布时间: 2012-02-19 19:43:37 作者: rapoo

数据库访问底层(DAL)的设计~~贴者有分,嘿嘿
偶自己先帖一个:
大虾表笑话俺^_^
using System;
using System.Data;
using System.Collections;
using System.Data.SqlClient;

namespace com.DataAccess
{

public enum DBType
{
SQL,Access,Oracle
}

public interface IDataAccess
{
IDbConnection Connection { get;}
void Open();
void Close();
void BeginTrans();
void CommitTrans();
void RollBackTrans();
int ExecNonQuery(string cmdText, CommandType cmdType, Hashtable ht);
IDataReader ExecReader(string cmdText, CommandType cmdType, Hashtable ht, bool closeConnection);
DataTable ExecDataTable(string cmdText, CommandType cmdType, Hashtable ht);
DataSet ExecDataSet(string cmdText, CommandType cmdType, Hashtable ht);
object ExecScalar(string cmdText, CommandType cmdType, Hashtable ht);
}

public class SQLAccess : IDataAccess
{
private SqlConnection myCon;
private SqlTransaction myTrans;
private bool inTrans = false;

public SQLAccess(string strConn)
{
myCon = new SqlConnection(strConn);
}

public IDbConnection Connection
{
get { return myCon; }
}

public void Open()
{
if (myCon.State != ConnectionState.Open)
myCon.Open();


}

public void Close()
{
if (myCon.State == ConnectionState.Open)
myCon.Close();
}

public void BeginTrans()
{
myTrans = myCon.BeginTransaction();
inTrans = true;
}

public void CommitTrans()
{
myTrans.Commit();
inTrans = false;
}

public void RollBackTrans()
{
myTrans.Rollback();
inTrans = false;
}

public object ExecScalar(string cmdText, CommandType cmdType, Hashtable ht)
{
SqlCommand myCmd = new SqlCommand();
AppendCommand(myCmd, cmdText, cmdType, ht);
try
{
return myCmd.ExecuteScalar();
}
catch
{
return null;
}
}

public IDataReader ExecReader(string cmdText, CommandType cmdType, Hashtable ht, bool closeConnection)


{
SqlCommand myCmd = new SqlCommand();
AppendCommand(myCmd, cmdText, cmdType, ht);
try
{
if(closeConnection)
return myCmd.ExecuteReader(CommandBehavior.CloseConnection);
else
return myCmd.ExecuteReader();
}
catch
{
return null;
}
}

public DataTable ExecDataTable(string cmdText, CommandType cmdType, Hashtable ht)
{
SqlCommand myCmd = new SqlCommand();
AppendCommand(myCmd, cmdText, cmdType, ht);
SqlDataAdapter myDa = new SqlDataAdapter(myCmd);
DataTable myDt = null;
try
{
myDt = new DataTable();
myDa.Fill(myDt);
}
catch{}
return myDt;
}

public int ExecNonQuery(string cmdText, CommandType cmdType, Hashtable ht)
{
SqlCommand myCmd = new SqlCommand();
AppendCommand(myCmd, cmdText, cmdType, ht);
if (inTrans)


myCmd.Transaction = myTrans;
int i = 0;
try
{
i = myCmd.ExecuteNonQuery();
}
catch
{
i = -1;
}
return i;
}

public DataSet ExecDataSet(string cmdText, CommandType cmdType, Hashtable ht)
{
SqlCommand myCmd = new SqlCommand();
AppendCommand(myCmd, cmdText, cmdType, ht);
SqlDataAdapter myDa = new SqlDataAdapter(myCmd);
DataSet myDs = null;
try
{
myDs = new DataSet();
myDa.Fill(myDs);
}
catch { }
return myDs;
}

public void AppendCommand(SqlCommand myCmd, string cmdText, CommandType cmdType, Hashtable ht)
{
myCmd.Connection = myCon;
myCmd.CommandText = cmdText;
myCmd.CommandType = cmdType;



if (ht != null)
{
IDictionaryEnumerator it = ht.GetEnumerator();
while (it.MoveNext())
{
SqlParameter paras = new SqlParameter(it.Key.ToString(), it.Value);
myCmd.Parameters.Add(paras);
}
}
}
}

/*================================
* 此部分功能暂未实现
*===============================*/
//public class OleAccess : IDataAccess
//{

//}

public class DbFactory
{
//防止类实例化
private DbFactory() { }

//此处实现接口继承多态
public static IDataAccess CreateInstance(string strConn)
{
return new SQLAccess(strConn);
}
}
}

[解决办法]

[解决办法]
接分
[解决办法]
先帮楼主顶起来!
[解决办法]
...
别光顶啊,帖一些你们常用的DAL啊~~~学习一下嘛~~
=====
一般用sqlheler就够了
[解决办法]
你这个是asp.net1.1还是2.0,我正急需2.0的呢,有哪位大峡提供一下,本来正在转2005
[解决办法]
http://www.51aspx.com/Tags/2/

读书人网 >asp.net

热点推荐