黑马程序员_ADO.Net(ExecuteReader,Sql注入与参数添加,DataSet,总结DataSet与SqlDataReader )
转自https://blog.csdn.net/u010796875/article/details/17386131
一.执行有多行结果集的用ExecuteReader
SqlDateReader reader=cmd.ExecuteReader();//查询结果在数据库中,不占客户端电脑内存
While(reader.Reader()){
Console.WriteLine(reader.GetString(1));
}
//初始指针指向第一条数据之前,每调用一次Reader(),指针下移一条,只要没有移到最后一条之后,就返回true;
private void Button_Click(object sender, RoutedEventArgs e)
{
using (SqlConnection conn = new SqlConnection("server=.;database=ADO.NET;uid=sa;pwd=***"))
{
conn.Open();
using (SqlCommand com = conn.CreateCommand())
{
//需要执行的T-sql语句
com.CommandText = "select * from T_User";
//执行查询语句并获取数据集
using (SqlDataReader read = com.ExecuteReader())
{
while (read.Read())
{
//read作为服务器端查询的数据集,
//通过调用方法:read.Get要查找的数据类型(第几列)
string username = read.GetString(1);
string userpwd = read.GetString(2);
MessageBox.Show(username+","+userpwd);
}
}
}
}
}
二.Sql注入与参数添加
//SQL注入例子:1'or '1'='1
cmd.CommandText = "select Userpwd from T_User where UserName='"+txtName.Text+"'";
//防止sql注入,使用参数更加严密:
string name = this.textBox1.Text;
string pwd = this.textBox2.Text;
using (SqlConnection conn = new SqlConnection("server=.;database=ADO.NET;uid=sa;pwd=***"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from T_User where UserName=@username and UserPwd=@userpwd";
cmd.Parameters.Add(new SqlParameter("@username",name));
cmd.Parameters.Add(new SqlParameter("@userpwd", pwd));
using (SqlDataReader read = cmd.ExecuteReader())
{
if (read.Read())
{
MessageBox.Show("登陆成功");
}
else
{
MessageBox.Show("登陆失败");
}
}
}
}
三.DataSet
1.SqlDataReader是连接相关的,SqlDataReader中的查询结果并不是放在程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样的好处就是无论查询结果有多少条,对程序占用的内存几乎没有影响;
2.SqlDataReader对于小数据量的数据来说带来的只有麻烦。ADO.Net中提供了数据集的机制,将查询结果集填充到本地内存中,这样连接中断,不会影响数据的读取,数据集的好处是降低数据库服务器压力,编程也简单
3.DataSet的用法:
using (SqlConnection conn = new SqlConnection("server=.;database=ADO.NET;uid=sa;pwd=***"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from T_User";
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
DataTable dt = ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
string name = dt.Rows[i][1].ToString();
MessageBox.Show(name);
}
}
}
四.总结DataSet与SqlDataReader
DataSet 是通过SqlDataAdapter类通过cmd查询的数据集,它是放在客户端内存中,SqlDataReader是执行cmd.ExecuteReader()查询语句所获得的数据集,它是放在数据库服务器端的,两者各有利弊,总的来说,如果数据集较小,则使用DataSet好,如果数据集非常大,还是在数据库中的好,无论哪一种都是需要连接数据库的,所以都要使用Using()查询完以后自动关闭连接。
SqlDataReader类,SqlDataAdapter类都是是实现了IDisposable接口(这个接口自动关闭连接),所以也要像SqlConnection类,SqlCommand类一样使用Using()进行资源管理;
黑马程序员_ADO.Net(ExecuteReader,Sql注入与参数添加,DataSet,总结DataSet与SqlDataReader )的更多相关文章
- 黑马程序员+SQL基础(上)
黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...
- 黑马程序员:轻松精通Java学习路线连载1-基础篇!
编程语言Java,已经21岁了.从1995年诞生以来,就一直活跃于企业中,名企应用天猫,百度,知乎......都是Java语言编写,就连现在使用广泛的XMind也是Java编写的.Java应用的广泛已 ...
- 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具
Java学习路线图引言: 黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...
- 黑马程序员——【Java高新技术】——代理
---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...
- 黑马程序员:3分钟带你读懂C/C++学习路线
随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...
- 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17
黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...
- 课程4:黑马程序员_spring2.5视频教程--视频列表
\黑马程序员_spring2.5视频教程\01Struts相关基础理论介绍.mp4; \黑马程序员_spring2.5视频教程\02搭建struts开发环境.mp4; \黑马程序员_spring2.5 ...
- 黑马程序员+Winform基础(上)
黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...
- 黑马程序员—C语言的函数、数组、字符串
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...
随机推荐
- matlab 可变参数与默认参数设置
1. 基本思路 矩阵矢量化编程,而不是循环和遍历: GPU 并行计算: 使用稀疏矩阵: 2. 实践 可变长输入参数,输出参数,需要解析(使用大括号进行索引): varargin varargout 函 ...
- C# ToString() 数据格式
double[] numbers= {1054.32179, -195489100.8377, 1.0437E21, -1.0573e-05}; string[] specifiers = { &qu ...
- 数据库访问工具 DBUtl(公孙二狗)
数据库访问工具 DBUtil DBUtil 用于简化数据库的访问,只要准备好配置文件,调用 DBUtil 的静态函数就能直接得到查询数据库的结果. 本文主要内容有: 数据库访问的思考 DBUtil 实 ...
- C# HttpWebResponse下载限速
在使用HttpWebResponse请求网络内容的时候,一般如下面这种方法: code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 非生产环境代码,请在实际使用时进行 ...
- 重写combobox模板,实现支持过滤的combobox
先看效果图 客户提出需求后,首选在百度查找可靠方案 看了几个,效果都不理想, 大多是把isEditNable设置成true,IsTextSearchNable设置成false 再对itemsSourc ...
- LINUX 蓝牙耳机的配置方法
由于经常使用SKYPE聊天打电话,一直觉得被拴在电脑前面不是很自由,终于在一个周末,一激动买了一个蓝牙耳机.经过几天的努力在Linux/Debian上用了起来,现在就把这个配置过程和大家分享. 第一 ...
- 天气预报API接口
原文:天气预报API接口 一.中央气象台API接口: 1. XML接口 http://flash.weather.com.cn/wmaps/xml/china.xml 这个是全国天气的根节点,列出所有 ...
- 浏览器禁用cookie后php如何保持session会话-use_trans_sid机制
原文:浏览器禁用cookie后php如何保持session会话-use_trans_sid机制 为防止浏览器禁用cookie导致服务器会话无法保持,php开发了一个机制,该机制开启后,浏览器发起请求后 ...
- WPF生成二维码
WPF可以通过ZXing.Net库来实现二维码的功能. 可以通过NuGet安装: Install-Package ZXing.Net 二维码的实现代码: #region 二维码的方法 /// < ...
- UWP入门(四)--设置控件样式
原文:UWP入门(四)--设置控件样式 官方定义:可以使用 XAML 框架通过多种方式自定义应用的外观. 通过样式可以设置控件属性,并重复使用这些设置,以便保持多个控件具有一致的外观. 可分享至不同e ...