黑马程序员_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培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...
随机推荐
- Gtkmm在dev-cpp下的配置
Gtkmm安装 1. 首先安装dev-cpp 2. 然后安装最新的gtkmm2.4来自http://www.pcpm.ucl.ac.be/~gustin/win32_ports/index.htm ...
- MATLAB利用散点进行函数曲线拟合
原文:MATLAB利用散点进行函数曲线拟合 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/laobai1015/article/details/77 ...
- JSONObject 解析
前解析json已使用get方法,但是,假设抛出将解决很烦人中断. 今天发现JSONObject还提供了一个更好用的方法opt.看来以后文档还是要更加认真的读的.以下是文档中的原文. A JSONObj ...
- 关于IOS7以及向下兼容音量控制问题
最近做个简单的播放界面,只是简单的设计到播放音频,ios系统自带播放有四个类可以播放音频 AVPlayer,AVAudioPlayer,MPMusicPlayerController,MPMovieP ...
- ASP UserInfoList 方法1
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserInfoList.a ...
- QTcpServer与QTcpSocket通讯
TCP TCP是一个基于流的协议.对于应用程序,数据表现为一个长长的流,而不是一个大大的平面文件.基于TCP的高层协议通常是基于行的或者基于块的. ●.基于行的协议把数 ...
- VS.NET版本与VC版本对应关系
VC++编译器版本 IDE版本 VC6 VC6.0 VC7 VS2003 VC8 VS2005 VC9 VS2008 VC10 VS2010 VC11 VS2012 VC12 VS2013 VC14 ...
- UWP显示对话框
public static async void ShowMessage(string message) { var msgDialog = new Windows.UI.Popups.Message ...
- PowerDesigner逆向工程导入MYSQL数据库总结(不容易,感谢前者们)
原文:PowerDesigner逆向工程导入MYSQL数据库总结(不容易,感谢前者们) 参考来源: http://blog.csdn.net/chamtianjiao/article/details/ ...
- Qt DLL总结【二】-创建及调用QT的 DLL(三篇)good
目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...