您当前位置:优侠库 > 资讯攻略 >
来源:未知
2019-09-02 22:40:51 浏览: 分类:资讯攻略

通用数据库操作

系统执行数据操作的步骤:

1.连接到数据库。

2.构建Sql语句。

3.执行语句。

4.返回执行结果。

注意:

一个系统可能有N个操作,然后另一个系统也会执行数据访问操作。那么,我们能执行语句并返回连接数据和库的结果吗?

把它写成公开的东西?答案是肯定的。比如:NHibernate,我们只需要参考它的类库,配置数据库连接语句和映射文件。

手术进行了。今天说的是不用写配置文件的常用数据库操作类库。仅暂时实现查询

首先,我们编写一个接口:

idata提供者

使用系统;
使用系统。集合。泛型;
使用系统。文本;
使用系统。Data . Common
使用系统。数据;
命名空间CustomDataOperate。data . data providers
{
公共接口idata provider
{
db connection open connection();
void Open();
void Close();
IDataReader ExecuteReader(字符串SQL);
int ExecuteNonQuery(字符串SQL);
I collection & lt;TEntity & gtExcuteReader & ltTEntity & gt(字符串sql)其中TEntity:class;
}
}

db connection open connection();打开数据库连接。

void Open();当连接关闭时,再次打开连接。

void Close();紧密联系

IDataReader ExecuteReader(字符串SQL);Execute Sql语句返回执行结果

int ExecuteNonQuery(字符串SQL);执行、删除、添加

我的收藏& ltTEntity & gtExcuteReader & ltTEntity & gt(字符串sql)其中TEntity:class;执行查询会返回一个对象集合。

然后为接口编写一个抽象类:

DataProviderBase

使用系统;
使用系统。集合。泛型;
使用系统。文本;
使用系统。Data . Common
使用CustomDataOperate。数据。翻译;
使用系统。数据;
命名空间CustomDataOperate。data . data providers
{
公共抽象类data provider base:idata provider
{
protected db Connection _ Connection;
受保护的DbCommand _ Command
受保护的IEntityTranslate _ Translate
#region IDataProvider成员
公共抽象db connection open connection();
public virtual void Close()
{
_ Connection。close();
}
公共虚拟void Open()
{
_ Connection。open();
}

受保护的虚拟DbCommand命令
{
get { return _ Command;}
set { _ Command = value;}
}

protected ientity Translate Translate
{
get
{
if(_ Translate = = null)
{
_ Translate = new entity Translate();
}
return _ Translate;
}
}
public abstract idata reader ExecuteReader(string SQL);
public abstract int ExecuteNonQuery(string SQL);

公共抽象ICollection & ltTEntity & gtExcuteReader & ltTEntity & gt(字符串sql)其中TEntity:class;
#endregion
}

Translate属性出现在DataProviderBase中。这是什么?他是一个(友谊翻译)转换者。

将IDataReader转换为实体

代码如下:

IEntityTranslate

使用系统;
使用系统。集合。泛型;
使用系统。文本;
使用系统。数据;
命名空间CustomDataOperate。Data.Translates
{
公共接口ientity Translate
{
TEntity Translate & lt;TEntity & gt(IDataReader reader)其中TEntity:class;
}
}
使用系统;
使用系统。集合。泛型;
使用系统。文本;
使用系统。数据;
使用MD = CustomDataOperate。数据。属性;
使用系统。反思;
命名空间CustomDataOperate。data . Translates
{
public class entity Translate:ientity Translate
{
public TEntity Translate & lt;TEntity & gt(IDataReader reader)其中TEntity:class
{
Type entity Type = Type of(TEntity);
对象实体=激活器。create instance(entity type);
foreach(entity type中的PropertyInfo信息。get properties())
{
string column name = string。空的;
object[] attributes = info。GetcustomAttributes(true);
foreach(attributes中的对象属性)
{
if(属性为MD.DataColumn)
{
column name =(属性为MD . DataColumn)。ColumnName
int filedIndex = 0;
while(filedIndex & lt;读者。FieldCount)
{
if(读者。GetName(filedIndex)= = column name)
{
info。SetValue(实体,读取器。GetValue(filedIndex),null);
break;
}
filedindex++;
}
break;
}
}
}
返回entity形式的实体;
}
}
}

为什么DataColumn会出现在System命名下的转换器中。Data 空?不,这是自定义属性。

数据列

使用系统;
使用系统。集合。泛型;
使用系统。文本;
命名空间CustomDataOperate。data . Attributes
{
public class DataColumn:System。属性
{
public DataColumn()
{
}
public DataColumn(string column name)
{
column name = column name;
}
public string column name
{
get;
set;
}
}
}

注意事项:

ColumnName:将数据库的字段映射到实体属性。

你还打算在这里做什么?是的,还缺少实现,所以我们开始实现这个提供者。

SqlDataProvider

使用系统;
使用系统。集合。泛型;
使用系统。文本;
使用CustomDataOperate。数据。数据提供者;
使用系统。Da关键字标签:数据库

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227329.html

攻略资讯
安卓软件