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

NqIceCoffee 2007-05-14 10:43:00
偶自己先帖一个:
大虾表笑话俺^_^
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);
}
}
}
...全文
1136 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmfengg 2008-05-12
  • 打赏
  • 举报
回复
用NHibernate吧,其它的ORM我未用过(包括LinQ),在其Website可找到相关Demo,感觉你在DAL处允许外部直接运行SQL或StoredProcedure好象不妥,程序大了不好管理.
babay2008 2007-05-16
  • 打赏
  • 举报
回复
d
AIRFLYNET 2007-05-16
  • 打赏
  • 举报
回复
d
oliverkahn 2007-05-16
  • 打赏
  • 举报
回复
学习~!
  • 打赏
  • 举报
回复
mark 学习
mdl821120 2007-05-16
  • 打赏
  • 举报
回复
在贴上一个,哈哈
NqIceCoffee 2007-05-16
  • 打赏
  • 举报
回复
还有要帖的吗 ^_^
aaajedll 2007-05-16
  • 打赏
  • 举报
回复
帮顶
Aricc 2007-05-16
  • 打赏
  • 举报
回复
接分喽
xray2005 2007-05-16
  • 打赏
  • 举报
回复
我一般是用Hibernate或者dataquicker等等
NqIceCoffee 2007-05-14
  • 打赏
  • 举报
回复
楼上在开玩笑?

貌似业务层的东西
wcs519 2007-05-14
  • 打赏
  • 举报
回复
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace fenlei
{
/// <summary>
/// db 的摘要说明。
/// </summary>

public class db
{
public SqlConnection objConn;

public db()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region 数据库连接
static public SqlConnection ReturnConn()
{
//SqlConnection Conn = new SqlConnection("server=10.200.200.211;uid=sa;pwd=123;database=sd_info");
SqlConnection Conn = new SqlConnection("server=60.217.229.131;uid=sd_user;pwd=sdnewsuser;database=sd_info");
//Conn.Open();
return Conn;
}
#endregion

//添加
#region 地区添加
static public void diquAdd(string memory,string diquName,DateTime diquDate,SqlConnection con)
{
using(SqlCommand com=new SqlCommand(memory,con))
{
com.CommandType=CommandType.StoredProcedure;
com.Parameters.Add("@diquName",diquName);
com.Parameters.Add("@diquDate",diquDate);
com.Connection.Open();
com.ExecuteNonQuery();
com.Connection.Close();
}
}
#endregion

#region 添加分类
static public void fenleiAdd(string memory,string fenleiName,string diquName,DateTime fenleiDate,SqlConnection con)
{
using(SqlCommand com=new SqlCommand(memory,con))
{
com.CommandType=CommandType.StoredProcedure;
com.Parameters.Add("@fenleiName",fenleiName);
com.Parameters.Add("@diquName",diquName);
com.Parameters.Add("@fenleiDate",fenleiDate);
com.Connection.Open();
com.ExecuteNonQuery();
com.Connection.Close();
}
}
#endregion
}

}
  • 打赏
  • 举报
回复
我不使用关系数据库。
心晴Sunheart 2007-05-14
  • 打赏
  • 举报
回复
偶用sqlhelper
就不贴了
xiaotupansy 2007-05-14
  • 打赏
  • 举报
回复
这个帖子要研究一下
xu_2007 2007-05-14
  • 打赏
  • 举报
回复
学习中
leohuang 2007-05-14
  • 打赏
  • 举报
回复
不过看着两个都不好用
leohuang 2007-05-14
  • 打赏
  • 举报
回复
zhuawang 2007-05-14
  • 打赏
  • 举报
回复
jf
lizheng__114 2007-05-14
  • 打赏
  • 举报
回复
高歌的那个跟petshop的sqlhelper很象
加载更多回复(25)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧