转载于http://www.cnblogs.com/asdyzh/p/9741641.html

ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法-转

using System.Data.SqlClient;
...
SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");
try
{
    conn.Open();
    SqlCommand cmd = new SqlCommand("SELECT * FROM Person.Address", conn);
    SqlDataReader reader = cmd.ExecuteReader();
    while(reader.Read())
    Console.WriteLine(reader["AddressLine1"]);
}
catch(SqlException ex)
{
    Console.WriteLine(ex.Message);
}
finally
{
    conn.Close();
}

[1] ExecuteNonQuery 方法
用法:ExecuteNonQuery方法用来执行INSERT、UPDATE、DELETE和其他没有返回值得SQL命令,——比如CREATE DATABASE 和 CREATE TABLE 命令。当使用 INSERT、UPDATE、DELETE时,ExecuteNonQuery返回被命令影响的行数。对所有其他命令,返回-1。

using System.Data.SqlClient;
...
SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");
try
{
 conn.open();
 ==============================================================
 -- INSERT 命令
 SqlCommand cmd = new SqlCommand("INSERT INTO titles(title_id, title, type, pubdate) " + 
 "VALUES('JP101', 'Programming Microsoft .NET', 'bussiness', 'May 2002')", conn);
 ==============================================================
 -- UPDATE 命令
 -- SqlCommand cmd = new SqlCommand("UPDATE titles SET title_id= 'JP2002' " + 
 -- "WHERE title_id = 'JP1001'", conn);
 ==============================================================
 -- DALETE 命令
 -- SqlCommand cmd = new SqlCommand("DELETE FROM titles WHERE title_id = 'JP202'", conn);
 ==============================================================
 cmd.ExecuteNonQuery();
}
catch(SqlException ex)
{
 Console.WriteLine(ex.Message); 
}
finally
{
 conn.Close();
}

[2] ExecuteScalar 方法
用法1:ExecuteScalar 方法执行一个SQL命令返回结果集的第一列的第一行。它经常用来执行SQL的COUNT、AVG、MIN、MAX 和 SUM 函数,这些函数都是返回单行单列的结果集。
''注意:''ExecuteScalar 一般返回一个Object类型,因此必须把它转换为强类型。如果转换不正确,.NET框架就会引发 InvalidCastException异常。

using System.Data.SqlClient;
...
SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");
try
{
 conn.open();
 SqlCommand cmd = new SqlCommand("SELECT MAX(advance) FROM titles", conn);
 decimal amount = (decimal) cmd.ExecuteScalar();
 Console.WriteLine("ExecuteScalar returned {0:c}", amount);
}
catch(SqlException ex)
{
 Console.WriteLine(ex.Message); 
}
finally
{
 conn.Close();
}

用法2.1:ExecuteScalar 方法的另一个普遍的用法是从数据库中检索BLOB(二进制大对象)。下面的例子从Pubs数据库的Pub_Info表的Logo字段中检索图像,并把他封装到一个位图中。

MemoryStream stream = new MemoryStream();
SqlConnection conn = new SqlConnection("server=ws7\leosql;database=pubs;uid=sa;pwd=lixiang@");
try
{
 conn.open();
 SqlCommand cmd = new SqlCommand("SELECT logo FROM pub_info WHERE pub_id='0736'", conn);
 byte[] blob = (byte[]) cmd.ExecuteScalar();
 stream.Write(blob, 0, blob.Length);
 Bitmap bitmap = new Bitmap(stream);
 // TODO:使用位图
 bitmap.Dispose();
}
catch(SqlException ex)
{
 Console.WriteLine(ex.Message); 
}
finally
{
 stream.Close();
 conn.Close();
}

用法2.2:您也许对如何把BLOB写入数据库感兴趣,答案是在包装了INSERT命令(该命令中包含了类型为byte[]的输入参数)的命令对象上调用ExcuteNonQuery方法。下面例子在Pubs数据库的Pub_Info表中插入一条记录,记录的Logo字段包含一个BLOB。

-- 定义和初始化blob变量
FileStream stream = new FileStream("Logo.jpg", FileMode.Open);
byte[] blob = new byte[stream.Length];
stream.Read(blob, 0, (int) stream.Length);
stream.Close();

SqlConnection conn = new SqlConnection("server=ws7\leosql;database=pubs;uid=sa;pwd=lixiang@");
try
{
 conn.open();
 SqlCommand cmd = new SqlCommand("INSERT INTO pub_info(pub_id, logo) VALUES('9937', @logo)", conn);
 cmd.Parameters.Add("@logo", blob);
 cmd.ExecuteNonQuery();
}
catch(SqlException ex)
{
 Console.WriteLine(ex.Message); 
}
finally
{
 stream.Close();
 conn.Close();
}

[3] ExecuteReader 方法
用法:
ExecuteReader 方法存在的目的只有一个:尽可能快地对数据库进行查询并得到结果。ExecuteReader 返回一个DataReader对象:如果在SqlCommand对象中调用,则返回SqlDataReader;如果在OleDbCommand对象中调用,返回的是OleDbDataReader。可以调用DataReader的方法和属性迭代处理结果集。它是一个快速枚举数据库查询结果的机制,是只读、只进的。对SqlDataReader.Read的每次调用都会从结果集中返回一行。

using System.Data.SqlClient;
...
SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");
try
{
 conn.Open();
 SqlCommand cmd = new SqlCommand("SELECT * FROM titles", conn);
 SqlDataReader reader = cmd.ExecuteReader();
 while(reader.Read())
  Console.WriteLine(reader["title"]);
  =================================
  -- Console.WriteLine(reader.GetName(0));
  =================================
}
catch(SqlException ex)
{
 Console.WriteLine(ex.Message);
}
finally
{
 conn.Close();
}

DataReader还有一个GetValue方法可以用来检索字段的值。GetValue返回一个一般性的Object,但是被无数个返回强类型的Get方法补充,比如GetInt32和GetDecimal(参考MSDN2005)。对GetOrdinal的调用是必须的,因为GetDecimal只接受整型索引。GetOrdinal所做的工作正好与GetName相反——它把字段名转换成数字索引。
注意:DataReader必须处理Close方法。

using System.Data.SqlClient;
...
SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");
try
{
 conn.Open();
 SqlCommand cmd = new SqlCommand("SELECT * FROM titles WHERE advance != 0", conn);
 SqlDataReader reader = cmd.ExecuteReader();
 int index = reader.GetOrdinal("advance");
 while(reader.Read())
  Console.WriteLine("{0:c}", reader.GetDecimal(index));
  =================================
  -- Console.WriteLine(reader.GetName(0));
  =================================
 ''reader.Close();''
}
catch(SqlException ex)
{
 Console.WriteLine(ex.Message);
}
finally
{
 ========================================================
 -- 可以配置DataReader,使它真的可以关闭一个底层连接
 -- reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
 ========================================================
 conn.Close();
}

ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法-转相关推荐

  1. ExecuteNonQuery(),ExecuteDataSet() ,ExecuteReader() ,ExecuteScalar(),DataTable() 用法

    一.ExecuteNonQuery方法 :执行非查询SQL操作,包括增insert.删delete.改update:ExecuteNonQuery()方法执行SQL语句并且不返回数据. public ...

  2. ExecuteScalar ExecuteReader ExecuteNonQuery 区别

    ExecuteScalar: 执行查询,并返回查询所返回的结果集中第一行的第一列.忽略其他列或行. ExecuteReader: 将 CommandText 发送到 Connection 并生成一个 ...

  3. [转]ExecuteNonQuery()、ExecuteReader()、ExecuteScalar()的简单说明

    http://blog.csdn.net/wuyujie1219/archive/2009/07/26/4380956.aspx 在连接SQL Server数据库:首先创建SqlConnection类 ...

  4. ExecuteReader的用法

    最近在做winform的编程,想到一真没有使用过ExecuteReader.可能以前以后它的用户不大,或者 不大好用,故没有用过.今天在这里将学习记录写下来,供读者参考: 1.MSDN上说:Sends ...

  5. ExecuteNonQuery()的用法

    ExecuteNonQuery()的用法 下面我们将详细讲解如何在Page_Load()中对数据库的增加.删除.修改,最后我们再来总结一下ExecuteNonQuery(),ExecuteScalar ...

  6. Asp.Net 初级 高级 学习笔记

    01.Main函数是什么?在程序中使用Main函数有什么需要注意的地方? 02.CLR是什么?程序集是什么?当运行一个程序集的时候,CLR做了什么事情? 03.值类型的默认值是什么?(情况一:字段或全 ...

  7. EntityFramework6.X 之 Operation

    上几个章节都是介绍EF6中Modeling内容,包括注解和Fluent,下面介绍EF6中的常用操作 Operation EF通过ObjectContext类定义从实体对象到数据库的映射,与ADO.NE ...

  8. MSSQL 视图/事务(TRAN[SACTION])/存储过程(PROC[EDURE])/触发器(TRIGGER )

    --视图 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同: 数据表是实际存储记录的地方, ...

  9. c# mysql executenonquery_c#数据四种执行方法(ExecuteNonQuery)

    1.使用ExecuteReader()操作数据库 2.使用ExecuteNonQuery()操作数据库 3.使用ExecuteScalar()操作数据库 4.使用DataSet数据集插入记录,更新数据 ...

最新文章

  1. Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'的解决
  2. crash recovery mysql_InnoDB crash recovery 完整过程
  3. 2013第41周三余生最年青的时候
  4. 数据学习资源【私藏】
  5. Multisim12\Multisim14访问主数据库失败的解决方法
  6. 恶搞c语言小程序,用C语言做的 一个整人的小程序
  7. 知乎上的有哪些较好的壁纸网站?
  8. 图像处理:连通区域算法
  9. log file switch (archiving needed) 等待事件一例
  10. 树莓派centos踩坑之旅,解决每次重启都需要route add才能有网络
  11. December, 14
  12. android vitamio集成教程,集成Vitamio实现万能播放器(示例代码)
  13. Android常见的错误及解决
  14. nodejs express搭建服务器(爬虫知乎精华帖,个人学习用)六 在express中建立路由
  15. [前端笔记——HTML 表格] 8.HTML 表格
  16. 企业管理推脱责任要不得.
  17. fms5序列号_linux下fms4.5安装及下载地址
  18. ISO 16750.5-2010道路车辆电子电气部件的环境试验 第五部分
  19. 大专文凭,考过软考的软件工程师,接着想进千人工程
  20. 声网Agora 云端录制服务上线,30 分钟即可快速集成

热门文章

  1. Python 实现局域网远程屏幕截图
  2. 移动 web 开发问题和优化小结
  3. Visual Studio 2022版本 B站黑马程序员C++自学分享-第一阶段(主要包括:自己敲的代码、通过注释来备注上自己对代码的理解)
  4. 电脑版和手机版QQ都要手机版QQ扫描二维码登录?
  5. Java编程培训班学费多少?
  6. 锂电池实验室规划设计方案 | 喜格SICOLAB
  7. 前端实现登录的步骤流程
  8. JAVA中J.U.C 包下并发类的应用
  9. 面向对象阶段总结 | 叁
  10. 苹果电脑MAC 在Finder里面显示隐藏文件方法