哈哈,又到了总结的时间了,来回顾一下今天主要学了关于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. 当你还在争夺移动支付的时候,我已经统一了IC卡市场

    摘要:虽然说今年移动支付行业的发展很快:苹果.Twitter和Facebook等巨头都开始进军这个市场,再加上PayPal.Coin和Square几个“老玩家”的存在,使得今年的移动支付市场热闹非凡. ...

  2. C++ Placement New

    先看一个题目: #include <stdio.h> #include <iostream> using namespace std; struct Base { int j; ...

  3. Android 模拟系统事件(三)

    简介 Android系统是基于Linux内核的,而Linux内核继承和兼容了丰富的Unix系统进程间通信(IPC)机制.Binder其实也不是Android提出来的一套新的进程间通信机制,它是基于Op ...

  4. 关于微信的jsapi_ticket的获取方法;

    对于一个从前端转到后端的开发人员来说,这个玩意儿开始的时候是有点郁闷:不过明白原理之后就简单了, 获取jsapi_ticket:必须先获取access_token; 微信开发文档说access_tok ...

  5. Oracle基础(二)---操作命令

    接上篇博客介绍Oracle基本概要.以下将介绍数据库的操作指令. Sql*plus经常使用命令 连接命令 1. conn[ect] 使用方法 connusername/password@网路服务名[a ...

  6. GridView.GridLines 属性

    GridLines.None 不显示网格线. GridLines.Horizontal 仅显示水平网格线. GridLines.Vertical 仅显示垂直网格线. GridLines.Both 同时 ...

  7. SQL SERVER2012新分页方式 轉載

    SQL SERVER2012在ORDER BY 子句中加入了新元素offset,允许用户在排序完成的结果集中自定义输出行范围,大大简化了分页SQL的书写方式和效率. SQL SERVER2012在OR ...

  8. notepad++ 必装插件

    nppftp ;FTP客户端,你懂的: explorer:设置常用文件链接:打开当前文件路径:

  9. Yii2.0中文开发向导——自定义日志文件写日志

    头部引入log类use yii\log\FileTarget; $time = microtime(true);$log = new FileTarget();$log->logFile = Y ...

  10. 十大最值得注意的MySQL变量

    MySQL数据库中的变量非常多,下文为您整理出了十大最值得注意的MySQL变量,希望对您学习MySQL数据库能够有一些帮助. AD: MySQL变量很多,其中有一些MySQL变量非常值得我们注意,下面 ...