黑马程序员_ADO.Net(ExecuteReader,Sql注入与参数添加,DataSet,总结DataSet与SqlDataReader )
来源:互联网 发布:mpp 数据库 编辑:程序博客网 时间:2024/05/22 14:59
一.执行有多行结果集的用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 )
- 黑马程序员_学习日记15_ADO.Net之DataSet
- 黑马程序员_ADO.NET通过DataSet访问数据库
- 【黑马程序员】SqlDataReader, DataSet(学习笔记)
- sqlDataReader与 DataSet
- 【黑马程序员】DataSet和SqlDataReader
- SqlDataReader 与 DataSet读取sql中的数据
- sql 查询语法汇总(三)SqlDataReader 与SqlDataAdapter+DataSet 的区别
- SqlDataReader 与SqlDataAdapter+DataSet 的区别
- 黑马程序员--学习整理 ExecuteNonQuery, ExecuteScalar, ExecuteReader, DataSet
- 黑马程序员_Ado.net学习总结
- 黑马程序员_ADO.NET学习知识总结
- 黑马程序员_ADO.NET
- 黑马程序员_学习日记48_616数据库开发及ADO.Net(带参数的Sql语句、数据库与文本文件导入导出、省市联动、资料管理器、DataSet (ado.net断开式数据访问)、SQLHelper)
- 黑马程序员_ADO.Net(配置文件的两种写法与使用方法,手动编写SqlHelper类)
- net[datatable与dataset]
- Sql Server与DataSet
- SqlDataReader,DataSet判空总结
- CMake學習(一)——cmake的編譯、安裝及簡單使用(ubuntu)
- Slope One 协同过滤算法
- servlet(二)
- StringBuilder的toString方法
- duilib中实现弹出模态框时要注意的地方
- 黑马程序员_ADO.Net(ExecuteReader,Sql注入与参数添加,DataSet,总结DataSet与SqlDataReader )
- 德哥推荐的书籍
- Programming and Using Linux Sound - in depth - MIDI ALSA
- C++:实现类似MFC的IsKindOf功能
- android自制拨号器
- 第三次训练 Box of Bricks
- ALSA Sequencer System
- Linux驱动开发----块设备驱动(内存模拟)Tiny6410
- vs2008部署问题