哈哈,又到了总结的时间了,来回顾一下今天主要学了关于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. php面向对象编程学习之高级特性

    前几天写了一篇关于php面向对象基础知识的博客,这两天看了php面向对象的高级特性,写出来记录一下吧,方便以后拿出来复习. 面向对象除了最基本的定义类之外,最主要就是因为面向的一些高级特性,运用这些高 ...

  2. 解决Qt程序发布时中文乱码问题(通过QApplication.addLibraryPath加载QTextCodec插件)

    Qt程序的文字编码,是通过插件来解决的,所以我们发布的时候需要把相应的插件也发布出去,在开发者电脑上程序会自动从插件目录加载到插件,但是如果发布给别的电脑使用,需要手动指定插件路径,如下所示: int ...

  3. 自写的LastPos,寻找字符串里的最后一个字符,RTL里没有提供这个函数——Delphi的String下标是从1开始的

    已经好几次了,没有这个函数还是感觉很不方便,所以自己写了一个: function LastPos(strFind :string; ch: Char): integer; var i, n: inte ...

  4. C++ string实现原理

    C++程序员编码过程中经常会使用string(wstring)类,你是否思考过它的内部实现细节.比如这个类的迭代器是如何实现的?对象占多少字节的内存空间?内部有没有虚函数?内存是如何分配的?构造和析构 ...

  5. servlet上传图片 服务器路径

    1.在servlet中上传图片,上传的文件夹是imge在webroot下,主要代码如下 private void saveImage(HttpServletRequest request, HttpS ...

  6. go-vim配置

    一.环境准备: 系统环境说明: [root@docker golang]# cat /etc/redhat-release CentOS Linux release (Core) [root@dock ...

  7. JAVA 内存的认识【转】

    [转]:http://blog.sina.com.cn/s/blog_68158ebf0100wp83.html 一.Java内存的构成     先上一个官方java document里的图: 由上图 ...

  8. asp.net ToString()方法介绍

      C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToStri ...

  9. tigervnc*

    yum install -y tigervnc* tigervnc-server vncserver www.webmin.cn http://blog.sina.com.cn/s/blog_4ba5 ...

  10. Netty之ChannelOption

    一.概述 最近在写一个分布式服务框架,打算用netty框架做底层网络通信,关于netty的学习可以参考如下资料: http://blog.csdn.net/column/details/enjoyne ...