oracle中 ado.net,Oracle+Ado.Net(一)

以前曾经用过Oracle+ExtJS进行项目开发,可能接触的很少,感觉和Sqlserver数据库大同小异,

就我自己而言,很多项目一般基于Ado.Net+Sqlserver2008 R2这一套(用过的Entity FrameWork实体框架(ORM)底层也是基于Ado.Net去访问数据库).

现在我自己写一个用Ado.Net访问Oracle数据库的一点点代码(还不完整,以后会补全基本的常用操作功能),我自己的思路是从简单三层一点点往抽象模式进行编写

首先定义的UserInfo是从oracle数据库映射的一个实体对象,在数据访问层中以UserInfoDal形式继承至BaseDal泛型父类和一个关于对于List操作的泛型接口,

代码如下:

nz8cpcDnrmLi4uLi4uLi4tLK5diUv8fAxckcpp889YAAAAASUVORK5CYII=

GetListByWhere()和GetListByWhere(string where)实现基本一致,DataReaderToList(OracleDataReader dr)和DataSetToList(DataSet ds)思路一样(ListAction的东西),其中实现代码如下:

public List GetListByWhere()

{

OracleConnection conn = DbAction.getConn();

string sqlStr = "select * from userinfo t";

OracleCommand com = new OracleCommand(sqlStr, conn);

conn.Open();

OracleDataReader dr = com.ExecuteReader();

List list = DataReaderToList(dr);

conn.Close();

return list;

}

public List DataReaderToList(OracleDataReader dr)

{

try

{

List list = null;

while (dr.Read())

{

list = new List();

UserInfo t = new UserInfo();

t.Fid = int.Parse(dr.GetOracleNumber(0).ToString());

t.Fname = dr.GetOracleString(1).ToString();

t.Fpassword = dr.GetOracleString(2).ToString();

list.Add(t);

}

return list;

}

catch (Exception)

{

throw;

}

finally

{

dr.Close();

}

}

其中会涉及到一个DbAction类,可以封装一些数据库连接关闭等的对象以及方法:

public static class DbAction

{

private readonly static string connString = System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ToString();

public static OracleConnection getConn()

{

OracleConnection conn = new OracleConnection(connString);

return conn;

}

//.....可以继续补充

}

回归正题,正常的通用逻辑应该归于在BaseDal泛型父类中进行实现

H4DuIBcmqEDKAAAAAElFTkSuQmCC

其中TableName,PrimaryKey字段属性和泛型T的实体对象,将在进行通用sql语句编程时起到作用.

BaseDal实现BaseAction接口的方法,并约束T在BaseModel,且允许进行new操作

实现的Delete方法代码如下:

public bool Delete(string id)

{

StringBuilder sb = new StringBuilder();

sb.AppendFormat("delete from {0} where {1}=:id",TableName,PrimaryKey);

OracleConnection conn = DbAction.getConn();

OracleCommand com = new OracleCommand(sb.ToString(), conn);

com.Parameters.Add(DbHelper.CreateParam("id", string.IsNullOrEmpty(id) ? "0" : id));

conn.Open();

int i=com.ExecuteNonQuery();

conn.Close();

if(i>0)

{

return true;

}

return false;

}

需要注意的是,在BaseModel也需要要有TableName,PrimaryKey等(以后会添加其他字段属性),并且在Model中自己定义的映射实体对象必须指定PrimaryKey

wV4o+wpg3fzRwAAAABJRU5ErkJggg==

至此,UI层直接通过业务逻辑层就可以实现一个简单的UserInfo列表的查询.

原文:http://www.cnblogs.com/Francis-YZR/p/4765135.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值