哈哈,又到了总结的时间了,来回顾一下今天主要学了关于ADO.NET的哪些知识吧。(这次学的ADO访问数据库主要以访问SQL数据库为主)

理论:

 首先我们要知道为什么要学习ADO.NET?

因为我们之前所学只能在查询分析器里查看数据,操作数据,我们不能让普通用户去学sql,所以我们搭建一个界面(web或winform)让用户方便的操作数据库中的数据

什么是ADO.NET?

ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类操作文件一样, System.Data.这组类是用来操作数据库(不光是MSSql Server),它提供了统一的编程接口让操作其它数据库(Access、Oracle等)的方式和操作MSSql Server一致

ADO.NET组成
—数据提供程序(常用类)
 
Connection: 连接对象,用来连接数据库
 
Command:  命令对象,用来执行SQL语句并返回结果
 
DataReader:数据读取器对象,只读、只进的结果集,一条一条读取数据(StreamReader、XmlReader微软的类库中这些Reader的使用方式都差不多)
 
DataAdapter:读取适配器对象,用来执行SQL语句并返回结果在DataSet与数据源之间建立通道,将数据源中的数据写入DataSet中,或者根据DataSet中的数据更新数据源。俗称“数据搬运工”
 
—DataSet    :   数据集对象,在内存中的临时数据库,是一个虚拟的数据源。利用数据适配器所执行的SQL命令或存储过程来填充数据。一旦填充后就可以断开与数据源的连接
 
 
ADO.NET的其他常见类
 
—ConnectionStringBuilder           自动生成连接字符串
—Parameter                                 带参数的SQL语句
—Transaction                               在ADO.NET中使用事务
 
—与DataSet相关的类
 
DataView                   视图类,DataTable中的数据以不同的视角查看
DataRowView             DataView中的行。
DataTable                   DataSet中的数据表
DataRow                    DataTable中的行
DataColumn              DataTable中的列
DataRealation           DataTable与DataTable的关系
onstraint                   DataTable中建立的约束
 
ADO.NET各类在开发中的职能
  

ADO.NET访问数据库的方式(有两种)

—方式一:
 
1.连接数据用Connection
 
2.执行SQL语句Command
 
3.执行完毕之后将结果一条一条返回。DataReader
 
—方式二:
 
使用DataAdapter+DataSet,这种方法本质还是通过Connection、Command、DataReader将数据全部取出来然后放到了DataSet中
 
实操:
 
在做项目之前首先要引进命名空间using System.Data.SqlClient;
 
1.插入数据
 
 
主要代码:
 static void Main(string[] args)
{
//创建连接字符串 string connstr = "Data Source=.;Initial Catalog=db_buiness;Integrated Security=True"; //打开连接 using (SqlConnection conn = new SqlConnection(connstr)) {
conn.Open(); //执行数据库操作 string sql = "insert into info values('jany',19,'女','123456')"; using (SqlCommand comm = new SqlCommand(sql, conn)) //创建命令对象
{
int i = comm.ExecuteNonQuery(); //执行对数据库的增删改,返回受影响的行数 if (i > )
{
Console.WriteLine("插入成功"); }
else
{
Console.WriteLine("插入失败");
} }
Console.ReadKey();
}
}

 结果:

2. 更新数据(删除数据类似于更新数据和插入数据,只是执行的sql语句不一样而已)

static void Main(string[] args)
{
//创建连接字符串 string connstr = "Data Source=.;Initial Catalog=db_buiness;Integrated Security=True"; //打开连接 using (SqlConnection conn = new SqlConnection(connstr)) {
conn.Open(); //执行数据库操作 string sql = "update info set name='rose' where id=4"; using (SqlCommand comm = new SqlCommand(sql, conn)) //创建命令对象
{
int i = comm.ExecuteNonQuery(); //执行对数据库的增删改,返回受影响的行数 if (i > )
{
Console.WriteLine("更新成功"); }
else
{
Console.WriteLine("更新失败");
} }
Console.ReadKey();
}
}

结果:

3.读取数据(运用SqlDataReader)

static void Main(string[] args)
{ //创建连接字符串
string connstr = "Data Source=.;Initial Catalog=db_buiness;Integrated Security=True"; using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open(); //打开连接 string sqltext = "select * from 职工"; using (SqlCommand comm = new SqlCommand(sqltext, conn))
{
using (SqlDataReader sda = comm.ExecuteReader()) //创建数据读取器,获取SqlDataReader的对象
{
while (sda.Read()) //一条一条来读取
{
Console.WriteLine("职工ID{0},职工号{1},仓库号{2},姓名{3},性别{4},工资{5}", sda[], sda[], sda[], sda[], sda[], sda[]);
} Console.ReadKey();
}
}
}

 结果:

3.DataSet运用(窗体程序)

首先设计窗体界面

主要代码:

private void Form1_Load(object sender, EventArgs e)
{
//创建连接字符串
string connstr = "Data Source=.;Initial Catalog=db_buiness;Integrated Security=True"; //打开连接
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open(); //执行数据库操作
string sqltext = "Select * from 职工";
using (SqlCommand comm = new SqlCommand(sqltext, conn)) //创建命令对象
{
DataSet sds = new DataSet(); //创建数据集 using (SqlDataAdapter sda= new SqlDataAdapter(comm) ) //创建数据适配器
{ sda.Fill(sds); //填充数据
} this.dataGridView1.DataSource =sds.Tables[]; //绑定数据 } }
}

结果:

4.用户登录(窗体程序)

窗体界面

主要代码:

private void btnok_Click(object sender, EventArgs e)
{
string user = this.txtname.Text;
string pwd = this.txtpwd.Text;
//创建连接字符串
string connstr = "Data Source=.;Initial Catalog=db_buiness;Integrated Security=True"; //打开连接
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open(); //执行数据库操作。 (向SqlCommand的Parameters中添加参数)
string sqltext = "select * from info where name=@user and pwd=@pwd";
SqlParameter sp = new SqlParameter("@user", user);
SqlParameter sp1 = new SqlParameter("@pwd", pwd); using (SqlCommand cmd = new SqlCommand(sqltext, conn))
{
cmd.Parameters.Add(sp);
cmd.Parameters.Add(sp1); DataTable dt = new DataTable(); //表示一个内存中数据表 using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) //创建数据适配器
{
sda.Fill(dt); //填充数据
}
if (dt.Rows.Count > )
{
MessageBox.Show("登陆成功");
}
else
{
MessageBox.Show("登录失败");
}
} }
} private void btnclo_Click(object sender, EventArgs e)
{
this.txtname.Text= "";
this.txtpwd.Text = ""; }

运行结果:

补充:

SQL注入漏洞攻击

—登录判断:select * from T_Users where UserName=... and Password=...,将参数拼到SQL语句中。
—构造恶意的Password:hello' or 1=1 --
 
—                      if (dataReader.Read())
 
—                        {
—                            MessageBox.Show("登陆成功");
—                        }
—                        else
—                        {
—                            MessageBox.Show("登陆失败");
—                        }
—防范注入漏洞攻击的方法:不使用SQL语句拼接,通过参数赋值

参数在SQLServer内部不是简单的字符串替换,SQLServer直接用添加的值进行数据比较,因此不会有注入漏洞攻击。(带参数的sql语句内部是调用了存储过程)

呵呵,今天就先写到这里吧。其他的一些知识等用到的时候在记录下来吧。加油!

ADO.NET知识的运用一(Day 26)的更多相关文章

  1. ADO.Net知识总结

    (一)基础知识 ADO.NET: .NET中用来向数据库提交执行SQL语句的一堆类 本机访问直接"Windows验证",但是一般项目中都是单独的数据库服务器,程序在另外一台电脑上连 ...

  2. ADO.NET知识学习总结

      1. 概述 使用的命名空间: System.Data.SqlClient 连接字符串    服务器/数据库实例+数据库名称+安全信息+用户名+密码  可参考http://www.connectio ...

  3. ado.net知识整理

    对ado.net总是半知半解,五大对象也总是混淆,近期自己做小项目练手,整理了一些知识点 ado.net的无要素(摘自其他博文) Connection 物件    Connection 对象主要是开启 ...

  4. ADO.NET知识汇总

    这又是一篇记录平常工作笔记的博客,无论是在排版还是解说上都不会有太多要求.同时这也是一篇不上博客园首页的博客,Just记录一些工作笔记. vSelect返回单个值 string connSQL = @ ...

  5. SQL数据库知识二(Day 25)

    又到了总结知识的时候了,今天主要把SQL数据库给简单的学完了,明天开始就要开始学ADO.NET的知识了.好了,话不多说,还是看一下今天都学了哪些内容. 1  字符串类型的知识点 --类型的使用 --截 ...

  6. SQL[连载3]sql的一些高级用法

    SQL[连载3]sql的一些高级用法 SQL 高级教程 SQL SELECT TOP SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目. SELECT TOP ...

  7. backbone学习笔记(一)

    因为工作的需要,从今天起对backbone的学习过程做下记录. 学习计划: 1.1周看基本知识(2014/1/18-2014/1/25) 2.基本知识总结(2014/1/26) 3.半周按教程写hel ...

  8. (Alpha)Let's-NABC

    效果图 NABC Need 在日常生活中我们也许经常有这样的疑问:在空闲时间内经常感到无处可去:抑或是有个心血来潮的想法却无人响应:或者困扰于自己狭小的交际圈,希望能有更多的朋友.(打个羽毛球没人一起 ...

  9. PSP总结

    一.回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 以前的回答:当初之所以选择计算机专业,是因为我比较喜欢数学,觉得计 ...

随机推荐

  1. Telnet RFC

    http://tools.ietf.org/html/rfc857 http://www.faqs.org/rfcs/rfc854.html 不错: http://blog.csdn.net/chao ...

  2. java 集合类说明与区别

    集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap ...

  3. Android Navigation Drawer(导航抽屉)

    Google I/O 2013 Android 更新了Support库,新版本的Support库中新加入了几个比较重要的功能. 添加 DrawerLayout 控件,支持创建  Navigation ...

  4. Zookeeper 编程

    ZooKeeper编程(一) 杂记 ZooKeeper的用途:distributed coordination;maintaining configuration information, namin ...

  5. JAVA里的String、Timestamp、Date相互转换

    Timestamp转化为String: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义 ...

  6. Putty以及adb网络调试

    1.什么是SSH? SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议. 传 ...

  7. The Rose

    Some say love it is a river 有人说爱是一条河 that drowns the tender reed 会淹没轻柔的芦苇 Some say love it is a razo ...

  8. Building Workspace速度慢的原因

    今天把ext3.0部署到web project很慢很慢,查了一下,这个当笔记. 转自http://blog.163.com/jong_cai/blog/static/87028045201311178 ...

  9. C - 字符识别?

    C - 字符识别? Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit Sta ...

  10. BZOJ 4199: [Noi2015]品酒大会( 后缀数组 + 并查集 )

    求出后缀数组后, 对height排序, 从大到小来处理(r相似必定是0~r-1相似), 并查集维护. 复杂度O(NlogN + Nalpha(N)) ------------------------- ...