c#数据查询输出

2012-07-17 17:07

1、使用ExecuteReader()操作数据库

2、使用ExecuteNonQuery()操作数据库

3、使用ExecuteScalar()操作数据库

4、使用DataSet数据集插入记录、更新数据。

1、使用ExecuteReader()操作数据库,执行查询操作的利器

ExecuteReader相比与DataSet而言,DataReader具有较快的访问能力,并且能够使用较少的服务器资源。DataReader对 象提供了“游标”形式的读取方法,当从结果中读取了一行,则“游标”会继续读取到下一行。通过Read方法可以判断数据是否还有下一行,如果存在数据,则 继续运行并返回true,否则返回false。

DataReader可以提高执行效率,基于序号的查询可以使用DataReader.当使用ExecuteReader()操作数据库时,会遇到知道某 列的名称而不知道某列的号的情况,这种情况可以通过使用DataReader对象的GetOrdinal()方法获取相应的列号。此方法接收一个列名并返 回此列名所在的列号。

示例代码:

string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字串

SqlConnection con = new SqlConnection(str); //创建连接对象

con.Open(); //打开连接

string strsql = "select * from mynews where id=1 order by id desc"; //创建执行SQL语句

SqlCommand cmd = new SqlCommand(strsql, con); //创建Command对象

SqlDataReader rd = cmd.ExecuteReader(); //创建DataReader对象

int id = rd.GetOrdinal("title"); // 使用GetOrdinal方法获取title列的列号

while (rd.Read()) //遍历DataReader对象

{

Label1.Text = "新闻id是" + rd["id"]; //输出对象的值

}

使用ExecuteReader()操作数据库,通常情况下是使用ExecuteReader()进行数据库查询操作,使用 ExecuteReader()查询数据库能够提升查询效率,而如果需要进行数据库事务处理的话,ExecuteReader()方法并不是理想的选择。

2、使用ExecuteNonQuery(),ExecuteScalar()操作数据库,执行增删改操作的利器

ExecuteNonQuery()通常情况下为数据库事务处理的首选,当需要执行插入、删除、更新等操作时,首选 ExecuteNonQuery(),ExecuteNonQuery()执行成功是返回的是一受影响的行数,对于“CREATE TABLE”和“DROP TABLE”语句,返回值为0,而对于所有其他类型的语句,返回值为-1。ExecuteNonQuery()操作数据时,可以不使用DataSet直接 更改数据库中的数据。

ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与 ExecuteNonQuery()并不相同,ExecuteScalar()方法的返回值的数据类型是Object类型。如果执行的SQL语句是一个查 询语句(SELECT),则返回结果是查询后的第一行的第一列,如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来 显示。

通常情况下ExecuteNonQuery()操作后返回的是一个值,而ExecuteScalar()操作后则会返回一个对 象,ExecuteScalar()经常使用于当需要返回单一值时的情况。例如当插入一条数据信息时,常常需要马上知道刚才插入的值,则可以使用 ExecuteScalar()方法。

示例代码:

string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字串

SqlConnection con = new SqlConnection(str); //创建连接对象

con.Open(); //打开连接

string strsql = "insert into mynews values ('刚刚插入的id是多少?')

SELECT @@IDENTITY as 'bh'"; //插入语句

SqlCommand cmd = new SqlCommand(strsql, con); //执行语句

Label1.Text = "刚刚插入的行的id是" + cmd.ExecuteScalar(); //返回赋值

上述代码使用了SELECT @@IDENTITY语法获取刚刚执行更新后的id值,然后通过使用ExecuteScalar()方法来获取刚刚更新后第一行第一列的值。

4、使用DataSet数据集插入记录、更新数据。

使用INSERT语句能够完成数据插入,使用DataSet对象也可以完成数据插入。为了将数据库的数据填充到DataSet中,则必须先使用 DataAdapter对象的方法实现填充,当数据填充完成后,开发人员可以将记录添加到DataSet对象中,然后使用Update方法将记录插入数据 库中。使用DataSet更新记录的步骤如下所示:

q 创建一个Connection对象。

q 创建一个DataAdapter对象。

q 初始化适配器。

q 使用数据适配器的Fill方法执行SELECT命令,并填充DataSet。

q 使用DataTable对象提供的NewRow方法创建新行。

q 将数据行的字段设置为插入的值。

q 使用DataRowAdd类的Add方法将数据行添加到数据表中。

q 把DataAdapter类的InsertCommand属性设置成需要插入记录的INSERT语句。

q 使用数据适配器提供的Update方法将新记录插入数据库。

q 使用DataSet类提供的AcceptChanges方法将数据库与内存中的数据保持一致。  

Insert 示例代码:

string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字串

SqlConnection con = new SqlConnection(str); //创建连接对象

con.Open(); //打开连接

string strsql = "select * from mynews"; // 编写SQL语句

SqlDataAdapter da = new SqlDataAdapter(strsql, con); //创建适配器

SqlCommandBuilder build = new SqlCommandBuilder(da); //构造SQL语句

DataSet ds = new DataSet(); // 创建数据集

da.Fill(ds, "datatable"); //填充数据集

DataTable tb = ds.Tables["datatable"]; //创建表

tb.PrimaryKey = new DataColumn[] { tb.Columns["id"] }; //创建表的主键

DataRow row = ds.Tables["datatable"].NewRow(); //创建DataRow

row["title"] = "使用DataSet插入新行"; //赋值新列

row["id"] = "15";

ds.Tables["datatable"].Rows.Add(row);

da.Update(ds, "datatable");

Update示例代码:

string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字串

SqlConnection con = new SqlConnection(str); //创建连接对象

con.Open(); //打开连接

string strsql = "select * from mynews"; // 编写SQL语句

SqlDataAdapter da = new SqlDataAdapter(strsql, con); //创建适配器

SqlCommandBuilder build = new SqlCommandBuilder(da); //构造SQL语句

DataSet ds = new DataSet(); // 创建数据集

da.Fill(ds, "datatable"); //填充数据集

DataTable tb = ds.Tables["datatable"]; //创建表

tb.PrimaryKey = new DataColumn[] { tb.Columns["id"] }; //创建表的主键

DataRow row = tb.Rows.Find(1);

row["title"] = "新标题";

da.Update(ds, "datatable");

Sql_server四种执行ExecuteReader、ExecuteNonQuery、ExecuteScalar、DataSet.docx的更多相关文章

  1. c#数据四种执行方法(ExecuteNonQuery)-----转载

    c#数据四种执行方法(ExecuteNonQuery)   1.使用ExecuteReader()操作数据库 2.使用ExecuteNonQuery()操作数据库 3.使用ExecuteScalar( ...

  2. 读书笔记——spring cloud 中 HystrixCommand的四种执行方式简述

    读了<Spring Cloud 微服务实战>第151-154页, 总结如下: Hystrix存在两种Command,一种是HystrixCommand,另一种是HystrixObserva ...

  3. ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()之间的区别

    本文来自:http://www.cnblogs.com/zhouxiaxue/archive/2006/05/12/398266.html http://www.cnblogs.com/yaoxc/a ...

  4. (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)四种数据库操作C#代码

    将对这四种数据库的操作封装到了2个类中可以拷贝过去直接使用. public sealed class OleDbClass { #region private utility methods & ...

  5. .net(C#数据库访问) Mysql,Sql server,Sqlite,Access四种数据库的连接方式

    便签记录Mysql,Sql server,Sqlite,Access四种数据库的简单连接方式 //using MySql.Data.MySqlClient; #region 执行简单SQL语句,使用M ...

  6. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

  7. C#_批量插入数据到Sqlserver中的四种方式

    先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...

  8. ArcGIS应用——四种计算图斑面积的方法

    ArcGIS中有多种方法可计算出图斑面积,本文总结了四种方法,是否可堪称史上最全? 1.计算几何 本人认为这是最适合非专业人士的方法,直接利用ArcGIS中的计算几何功能进行计算. a.首先添加一do ...

  9. C#批量插入数据到Sqlserver中的四种方式 - 转

    先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...

随机推荐

  1. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何实现开平方的Pow函数

    使用函数EXPT即可(输入的两个参数都可以是LREAL类型),注意跟计算器对比是Xy,所以4的0.123次方结果是1.18     4的0.5次方是2     更多教学视频和资料下载,欢迎关注以下信息 ...

  2. Windows下如何替换鼠标指针

    鼠标指针替换(应用)教程美化 讲解如何替换鼠标指针,从网上下载的鼠标指针该怎么替换呢?认真看完下边的就会了!鼠标指针常见的文件格式为:.cur..ani两种格式.还可能有的是.exe 格式如果是exe ...

  3. android wifi调试(无线调试) 一步到位

    没有数据线时候,怎么进行调试开发?只要在一个局域网内,最好选择wifi调试! 网上有很多这样的教程,但是有很多步.很繁琐.最近我在gp上下载了一个软件可以实现点击一步就可以了.不需要在手机上输入任何命 ...

  4. python __set__ __get__ __delete__

    class Attr(object): def __init__(self,attrname,attrtype): self.attrname=attrname self.attrtype=attrt ...

  5. Python—— 性能分析入门指南

    虽然并非你编写的每个 Python 程序都要求一个严格的性能分析,但是让人放心的是,当问题发生的时候,Python 生态圈有各种各样的工具可以处理这类问题. 分析程序的性能可以归结为回答四个基本问题: ...

  6. odoo8.0下selection_add的使用

    在odoo中有selection类型的字段,用于限定字段的值在某些范围之内,在view上面显示此字段时,会显示一个下拉的列表. 如果是自己新定义的字段,这个列表的内容可以自己定义,但如果是继承自某个对 ...

  7. Python进阶---python strip() split()函数实战(转)

    先看一个例子: >>> ipaddr = 10.122.19.10 File "", line 1 ipaddr = 10.122.19.10 ^ SyntaxE ...

  8. 基于shiro+jwt的真正rest url权限管理,前后端分离

    代码地址如下:http://www.demodashi.com/demo/13277.html bootshiro & usthe bootshiro是基于springboot+shiro+j ...

  9. IOS研究之App转让流程须知具体介绍

     网络上有非常多开发人员提问怎么转让App并想知道具体的流程.实际上Appstore的App转让流程还是比較简单的.以下特酷吧依据自己的实际操作总结下iOS Appstore中App的转让流程.供 ...

  10. .NET面试题(一)

    1.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? foreach (System.Windows.Forms.Control control in this.Contr ...