3.设计数据存储策略:ADO.NET 2.0及其他
2007-07-27 21:45
441 查看
使用DataReader
– 相对简单的调用方式
– 同Command对象配合
– 适用相对简单的数据环境
使用DataSet
- 离线数据类型
- 同DataAdapter配合
- 适用复杂的数据环境
无论使用什么数据源控件,都会添加bindingsource控件,对数据进行封装 。
UI层是不能越过业务逻辑层,直接对数据层进行访问,而是通过存储过程、视图或者自定义函数进行访问。
同样,数据层也不会直接对数据库进行访问,而是通过数据组件进行访问。
publick class student
{
public stirng _name;
public int _id;
public int _age;
}
数据直接暴露在外面,因此,必须对数据进行封装,修改为属性。
private string _name;
public int Name
{
get {return int _id;}
}
同样可以添加对属性的设置条件
private int _age;
public int age
{
get {return _age}
set
{
if(value >0 && value <100)
_age =value;
else
//抛出异常
}
}
接下来可以对数据进行读取,可以用下面的代码:
void student()
{
SqlConection conn = new ...;
sqlDatacommand sqlcmd = ...
sqlDatareader reader = ...
string strcmd = "select ....."
//接下来就可以对数据进行读取等操作
}
但是,直接把数据读取写在逻辑层中,会导致紧耦合,如数据进行修改,就必须对代码进行全部修改。
interface IDBProvider
{
void GetStudent(student s);
void savestudent(student s);
}
public class sqlDBProvider:IDBProvider
{
void GetStudent(student s);
void savestudent(student s);
}
public class AcessDBProvider:IDBProvider
{
void GetStudent(student s);
void savestudent(student s);
}
这样,我们通过接口对student数据进行读取,而当要数据发生变化时,如要采用Oracle数据库,我们只需要增加:
public class OracleDBProvider:IDBProvider
{
void GetStudent(student s);
void savestudent(student s);
}
而接口保持不变,因此,业务逻辑层不需要发生变化。
student函数可以修改为如下代码:
void student(IDBProvider dbp)
{
dbp.GetStudent(this);
.... ...
}
我们就可以新建student对象:
student s1 = new student((IDBProvider)new sqlDbProvider())
下面就可以对该student对象使用,而不需要关系他是什么类型的数据库。
其实,我们还可以把要访问的数据组件或者名称写到config文件中,然后用
Appsetting.getresource来把字符串读取出来,然后用.net中的类工厂反射,
Assembly.load(....),new typeof(..)来实现完全的松散耦合。
提高数据库性能:
----硬盘、CPU
----建立索引,采用存储过程,这些都是编译的代码,在执行时,能够提高性能
----层次不要太多,层次多,耦合少,但是性能会降低。在层次和性能上要做出折衷。
– 相对简单的调用方式
– 同Command对象配合
– 适用相对简单的数据环境
使用DataSet
- 离线数据类型
- 同DataAdapter配合
- 适用复杂的数据环境
无论使用什么数据源控件,都会添加bindingsource控件,对数据进行封装 。
UI层是不能越过业务逻辑层,直接对数据层进行访问,而是通过存储过程、视图或者自定义函数进行访问。
同样,数据层也不会直接对数据库进行访问,而是通过数据组件进行访问。
publick class student
{
public stirng _name;
public int _id;
public int _age;
}
数据直接暴露在外面,因此,必须对数据进行封装,修改为属性。
private string _name;
public int Name
{
get {return int _id;}
}
同样可以添加对属性的设置条件
private int _age;
public int age
{
get {return _age}
set
{
if(value >0 && value <100)
_age =value;
else
//抛出异常
}
}
接下来可以对数据进行读取,可以用下面的代码:
void student()
{
SqlConection conn = new ...;
sqlDatacommand sqlcmd = ...
sqlDatareader reader = ...
string strcmd = "select ....."
//接下来就可以对数据进行读取等操作
}
但是,直接把数据读取写在逻辑层中,会导致紧耦合,如数据进行修改,就必须对代码进行全部修改。
interface IDBProvider
{
void GetStudent(student s);
void savestudent(student s);
}
public class sqlDBProvider:IDBProvider
{
void GetStudent(student s);
void savestudent(student s);
}
public class AcessDBProvider:IDBProvider
{
void GetStudent(student s);
void savestudent(student s);
}
这样,我们通过接口对student数据进行读取,而当要数据发生变化时,如要采用Oracle数据库,我们只需要增加:
public class OracleDBProvider:IDBProvider
{
void GetStudent(student s);
void savestudent(student s);
}
而接口保持不变,因此,业务逻辑层不需要发生变化。
student函数可以修改为如下代码:
void student(IDBProvider dbp)
{
dbp.GetStudent(this);
.... ...
}
我们就可以新建student对象:
student s1 = new student((IDBProvider)new sqlDbProvider())
下面就可以对该student对象使用,而不需要关系他是什么类型的数据库。
其实,我们还可以把要访问的数据组件或者名称写到config文件中,然后用
Appsetting.getresource来把字符串读取出来,然后用.net中的类工厂反射,
Assembly.load(....),new typeof(..)来实现完全的松散耦合。
提高数据库性能:
----硬盘、CPU
----建立索引,采用存储过程,这些都是编译的代码,在执行时,能够提高性能
----层次不要太多,层次多,耦合少,但是性能会降低。在层次和性能上要做出折衷。
相关文章推荐
- 使用ADO.NET2.0提升数据交互性能(3)
- ADO.NET 2.0 - 如何使用 DataView 来排序数据
- ADO.NET 2.0:如何排除错误信息「当目前没有数据时,尝试读取无效」(C#)
- 在 ADO.Net 2.0 的中小型应用中,数据层代码是否还有存在的必要?
- ADO.NET 2.0 大批量数据操作和多个动态的结果集
- 使用ADO.NET2.0提升数据交互性能(1)
- 用多活动结果集优化ADO.NET2.0数据连接
- 大家好ado.net 实体数据模型 怎么支持其他数据库?
- 黑马程序员-ado.net 存储查询到的离线数据
- C#中利用ADO.NET存储图片、文件等二进制数据
- ADO.NET 2.0 - 如何使用 DataView 来排序数据
- 上传图像并使用ASP.NET 2.0数据源控件代码存储二进制数据
- 使用ADO.NET2.0提升数据交互性能
- ado.net存储字符串的几种数据类型
- ADO.NET之利用存储过程录入数据
- 使用ADO.NET2.0提升数据交互性能(1)
- 在ASP.NET 2.0中操作数据之六十六:在TableAdapters中使用现有的存储过程
- 稳扎稳打Silverlight(28) - 2.0通信之调用ADO.NET Data Services(数据服务)
- 权限设计中的数据灵活存储设计策略参考[以不变应万变]
- 使用ADO.NET2.0提升数据交互性能(4)