【ADO.NET】数据库查询SQLCommand方法汇总
2016-02-22 08:31
513 查看
前言
我们都知道要对数据库进行操作,首先要通过Sqlconnection来连接数据库,在通过SqlCommand来操纵数据库。但是SqlCommand中有很多的方法,初学者可能很糊涂,完全不明白是干什么的。在此小编给大家综合汇总一下如何对数据库进行操纵。一、创建SqlCommand对象
可以通过三种方式创建Sqlcommand对象。1. 用NEW关键字直接创建新实例,然后设置属性;
2. 使用看一个可用的构造函数来指定查询字符串以及SqlConnection对象;
3. 调用Sqlconnection类的CreateCommand方法;
展示如下:
VB.Net版本
'开头引用 Imports System.Data.SqlClient Imports System.Data '正文 Dim sqlstr, sqlselect As String sqlstr = "server=GodOfWar;database=adoNetTest;uid=sa;pwd=123456;" Dim con As New SqlConnection(sqlstr) sqlselect = "select * from person where pId='1'" con.Open() '直接声明 Dim cmd As New SqlCommand '使用无参数化构造函数 cmd = New SqlCommand() cmd.Connection = con cmd.CommandText = sqlselect '使用参数化构造函数 cmd = New SqlCommand(sqlselect, con) '使用connection的createcommand方法 cmd = con.CreateCommand() cmd.CommandText = sqlselect
C#版本
//开头引用 using System.Data; using System.Data.SqlClient; string sqlstr = "server=GodOfWar;database=adoNetTest;uid=sa;pwd=123456;"; SqlConnection conn = new SqlConnection(sqlstr); conn.Open(); string sqlselect = "select * from person where pId='1'"; //直接声明 SqlCommand cmd = new SqlCommand(); //使用无参数构造函数 cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = sqlselect; //使用参数化构造函数 cmd = new SqlCommand(sqlselect, conn); //使用connection的createcommand方法 cmd = conn.CreateCommand(); cmd.CommandText = sqlselect;
二、总揽
我们都知道对数据库的操作分为增删改查四种。按照返回值我们可以分成两大类:一个是查,返回受影响的行数或者是数据;另一个是增删改,返回的是受影响的行数。我们可以按照这种结构来分析。 此处的内容和小编以前的博客【机房重构&牛腩】SQLHelper为D层提供强大的方法集合有点相似,算是对其更加详细的梳理。
三、执行返回行查询操作
最常见的是执行返回结果的查询,如,要获取期末分数是80分的学生的学号、姓名、性别、学院等,可以使用如下查询:select StudentID,StudentName,StudentSex,Department from text_Info where Score ='80'
方法一、我们可以调用SqlCommand的ExecuteReader方法,如以下代码所示:
SqlCommand comm =new SqlCommand("select * from CGSZ where cid="+id,conn); //把读取到的数据放到reder中,reder是SqlDataReader。 SqlDataReader reder=comm.ExecuteReader(); //前进到下一条记录中,如果下一条记录中没有了就返回false,如果有就一直读完。 while(reder.Read()) { //读出内容列 ,赋值给str //reder["cname"]是]从reader对象中读取这一行列名为cname的数据,也可以是下标。 string str=reder["cname"].ToString(); //读取分类列 string str1=reder["ckind"].ToString(); //分别为文本框加载数据 this.txtContent.Text = str; this.txtClass.Text = str1; }
从代码中的第二行可以看出,ExecuteReader方法返回一个SqlDataReader对象,正是利用这个对象来检查查询的结果。在学习三层的例子中,老师就利用了这个方法来半段数据库中是否有我们输入的用户名和密码,个人感觉代码有点长,当时也没有很深刻的理解。现在总结一下。
分析:SqlDataReader是利用了遍历的方法,把查到的结果一一通过reder.Read()的方法,来判断是否存在,如果有为True,没有了就为False,退出循环。
>
方法二、使用SQLDataAdapter对象,它可以在数据库中获取数据,并将其存放在DataSet中。也可以取得缓存在DataSet中的更新,并将他们提交给数据库。
特点:为处理脱机数据设计,通过Fill方法与datatable相连。
string sqlstr = "server=GodOfWar;database=adoNetTest;uid=sa;pwd=123456;"; SqlConnection conn = new SqlConnection(sqlstr); conn.Open(); string sqlselect = "update custumer set a='1'where b='2'"; SqlCommand cmd = new SqlCommand(sqlselect,conn); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sqlselect,conn); da.Fill(ds); //显示获取的客户信息 foreach (DataRow row in ds.Tables[0].Rows ) { Console.WriteLine("{0},{1},{2:d}", row["pId"], row["pName"],row["pSex"]); }
四、不返回结果的操作
不返回结果的查询通常被称为”操作查询“,分为两大类:数据操作语言(DML)查询,也就是我们经常说的增删改,eg:
Insert into customer(ID,CompanyName)values ('1','abc') Update customer set CompanyName ='a' where ID ='1' Delete from customer where ID='1'
数据定义语言(DDL)查询,用来修改数据库结构,eg:
create table abc ( a int not null, b int not null )
执行这类的,可以通过调用Sqlcommand的ExecuteNonQuery方法,返回受影响的行数:
//链接数据库的语句 string sqlstr = "server=GodOfWar;database=adoNetTest;uid=sa;pwd=123456;"; SqlConnection conn = new SqlConnection(sqlstr); conn.Open(); //操作查询语句 string sqlselect = "update custumer set a='1'where b='2'"; SqlCommand cmd = new SqlCommand(sqlselect,conn); //执行,返回受影响的行数,int cmd.ExecuteNonQuery();
五、心得
从一开始学习就感觉这里很乱,如果不明白自己完全不知道在干什么,所以这里的总结是一定要仔细有的,加油!相关文章推荐
- SQL Server代理(9/12):理解作业和安全
- SQLite3日期与时间,常见函数
- Oracle、MySql、SqlServer比对
- sqlite3日期数据类型
- 3. redis的超时,事务,watch
- MySQL数据定义语句
- Mysql存储引擎
- MySQL优化经验
- Hadoop2.6.3+Hive-1.2.1+mysql5.6.15 问题汇总
- mysql对于imoji表情的支持
- sql注入
- 在一个千万级的数据库查寻中,如何提高查询效率?
- 测试工作中常用到的SQL语句
- Navicat for MySQL 数据备份教程
- sql按条件进行批量查询或update的关键字in
- MySQL 5.5 主从复制(感悟)
- redis 学习
- 浅谈MongoDB中几种不同查询方法
- mysql做update时有in关联子查询条件时效率奇慢分析
- Mysql 分组聚合实现 over partition by 功能