深入三层
2016-02-02 20:30
429 查看
【背景】
敲三层的时候遇到很多不懂的代码,以及参数调用问题,所以在敲七层之前,先用三层敲了一条线,解决了很多
心中存有疑问的东西。很多人用SQlHelper代码大体上相同,这些是冠以关于ADO.net的一些相关知识比如
SQLDateReader等,所以把这些天学习的东西先总结一下。
问题1:在D层写SQL语句的时候用到@这是做什么用的呢?
我们通过看博客大多已经知道了:防止SQL注入。在机房收费的时候就已经接触过SQL注入,那么什么才是SQL注入呢?
我们学习机房收费的时候敲的时候代码是这样的:txtsql = "select * from Card_info where CardNo = '" & txtCardNo.Text & "'"
如果我们在文本框中输入 1' or '1'='1 则是 select * from Card_info where CardNo ='1'
or '1'='1' 永远为true 这样就会登录我们的系统造成信息的泄露。SQL注入实际上就是SQL语句拼接变成一个合理的SQL语句,进入我们的系统,所以在用C# 敲的时候用了@,CardNo=@CardNo,有效防止SQL注入。
问题2:我们在敲三层登录的时候查询用的是SqlDataReader,这是查询数据的一种方法,在博客上在写SQLHelper时
很多人选择用DataTable(dataset包含若干datatalbe)返回数据集,这两种查询方式有什么区别呢?
这个查询和机房收费系统用的mrc.EOF,mrc.BOF有点相似,查询时是要根据自己写的SQL语句查询的,查询的时候用什么方式查呢?
![](http://img.blog.csdn.net/20160202192813714?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
SqlDatereader读取数据的时候是从数据库对应表中,第一条数据之前开始读,执行一次while(reader.read())然
后就向下读一条,知道找到自己对应的卡号就返回一个值,读到一条就返回一个值,知道读到最后一条就不再继续查
询了。这样如果想返回数据集就有些麻烦了。
SQLDateReader优点:查询结果是放在数据库中的,读取数据SQl会自己做优化,会占用客户端少量内存。
缺点:如果服务器发生情况,遭到破坏等,那么客户端就不能查到数据了。
dataset 优点:数据放到了客户端,数据库那边被破坏也不会影响到客户端
缺点:占用客户端大量内存。
dataset 返回数据集的代码也很简单:DataSet ds=new DataSet(), SqlDataAdapter da = new
SqlDataAdapter(sql,conn);da.Fill(ds);
在博客中看到有人写到DataTable是一张保存数据的网络虚拟表,返回类型是一个结果集,可以用泛型替代,这
些东西还是等以后慢慢探索吧。
在敲三层的时候用到Using,using是做什么用的呢?
在一本书是这样写的,在敲完程序或会产生很多垃圾,为了在后台释放资源,设计了很多方法如:
SqlConnection类,公开了Dispose方法,而后期设计了一种比较简单的方法,一种确保已经清除了资源的简单方法是
打开Ussing 代码中的一个短期生存资源。
我的个人理解就是起到一个关闭连接的作用吧,包括在代码中看到他们在SQLHelper中用到的try---cash应该也是
为了关闭对象吧。
实体层到底是做什么的呢?
我个人的理解:负责传送和接受数据的,entity实体层本身对属性也有定义get;set;以查询为例:从客户端文本框获得数据,变成参数从U层--B层--D层,在D层执行SQL语句然后将查询的结果集(比如姓名、学号,学院)传给实体层,实体层接收这些值,然后又从D层返回B层,再返回到U层。这就是为什么每个层返回时要返回实体类型。
敲三层的时候遇到很多不懂的代码,以及参数调用问题,所以在敲七层之前,先用三层敲了一条线,解决了很多
心中存有疑问的东西。很多人用SQlHelper代码大体上相同,这些是冠以关于ADO.net的一些相关知识比如
SQLDateReader等,所以把这些天学习的东西先总结一下。
问题1:在D层写SQL语句的时候用到@这是做什么用的呢?
我们通过看博客大多已经知道了:防止SQL注入。在机房收费的时候就已经接触过SQL注入,那么什么才是SQL注入呢?
我们学习机房收费的时候敲的时候代码是这样的:txtsql = "select * from Card_info where CardNo = '" & txtCardNo.Text & "'"
如果我们在文本框中输入 1' or '1'='1 则是 select * from Card_info where CardNo ='1'
or '1'='1' 永远为true 这样就会登录我们的系统造成信息的泄露。SQL注入实际上就是SQL语句拼接变成一个合理的SQL语句,进入我们的系统,所以在用C# 敲的时候用了@,CardNo=@CardNo,有效防止SQL注入。
问题2:我们在敲三层登录的时候查询用的是SqlDataReader,这是查询数据的一种方法,在博客上在写SQLHelper时
很多人选择用DataTable(dataset包含若干datatalbe)返回数据集,这两种查询方式有什么区别呢?
这个查询和机房收费系统用的mrc.EOF,mrc.BOF有点相似,查询时是要根据自己写的SQL语句查询的,查询的时候用什么方式查呢?
SqlDatereader读取数据的时候是从数据库对应表中,第一条数据之前开始读,执行一次while(reader.read())然
后就向下读一条,知道找到自己对应的卡号就返回一个值,读到一条就返回一个值,知道读到最后一条就不再继续查
询了。这样如果想返回数据集就有些麻烦了。
SQLDateReader优点:查询结果是放在数据库中的,读取数据SQl会自己做优化,会占用客户端少量内存。
缺点:如果服务器发生情况,遭到破坏等,那么客户端就不能查到数据了。
dataset 优点:数据放到了客户端,数据库那边被破坏也不会影响到客户端
缺点:占用客户端大量内存。
dataset 返回数据集的代码也很简单:DataSet ds=new DataSet(), SqlDataAdapter da = new
SqlDataAdapter(sql,conn);da.Fill(ds);
在博客中看到有人写到DataTable是一张保存数据的网络虚拟表,返回类型是一个结果集,可以用泛型替代,这
些东西还是等以后慢慢探索吧。
在敲三层的时候用到Using,using是做什么用的呢?
在一本书是这样写的,在敲完程序或会产生很多垃圾,为了在后台释放资源,设计了很多方法如:
SqlConnection类,公开了Dispose方法,而后期设计了一种比较简单的方法,一种确保已经清除了资源的简单方法是
打开Ussing 代码中的一个短期生存资源。
我的个人理解就是起到一个关闭连接的作用吧,包括在代码中看到他们在SQLHelper中用到的try---cash应该也是
为了关闭对象吧。
实体层到底是做什么的呢?
我个人的理解:负责传送和接受数据的,entity实体层本身对属性也有定义get;set;以查询为例:从客户端文本框获得数据,变成参数从U层--B层--D层,在D层执行SQL语句然后将查询的结果集(比如姓名、学号,学院)传给实体层,实体层接收这些值,然后又从D层返回B层,再返回到U层。这就是为什么每个层返回时要返回实体类型。
相关文章推荐
- 使用CSS实现鼠标悬停在一行上,显示某些元素
- JPA和事务管理
- ssh远程执行shell实例
- maven仓库
- Android进阶自定义控件之五子棋盘
- (2)第一个shell脚本和shell变量
- html中的table在android端显示
- (C++) 分隔符匹配
- Linux---用户登陆查看
- linxu的文件类型和扩展名
- struts2拦截器
- 递归调用图例
- Cocos Creator 的属性创建
- POJ1094 Sorting It All Out(拓扑排序)
- struts2上传文件
- 多个返回 顶部的代码
- 同学们,OpenCV出3.0了,速去围观!
- PKU2104K-th Number
- 9 集合类型
- 2016年2月2日实习日志