//***********************************************************
//*名称:一个程序详细研究DataReader,同时显示Command用法
//*功能:演示DataReader的各项操作。
//*说明:如果需要文字说明请查看我的BLOG里面关于ado.net的文章
//*作者:雪冬寒
//*BOLG:http://blog.csdn.net/bineon
//***********************************************************
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;

class SqlReader
{
 const string connStr = "data source=bineon;user id=sa;password=87345587;initial catalog=contract";
 SqlConnection conn;

public SqlReader()
 {
  conn = new SqlConnection(connStr);
 }
 
 //**************************************
 //*演示DataReader的两种取值方法
 //**************************************
 public void basicReader()
 {
  string sql="select * from friend";
  SqlCommand cmd;
  cmd = conn.CreateCommand();
  cmd.CommandText = sql;
  conn.Open();
  SqlDataReader reader = cmd.ExecuteReader();
  while(reader.Read())
  {
   Console.WriteLine("No:{0}\tName:{1}\tPhoneNum:{2},\tAddress:{3}",reader.GetInt32(0).ToString(),reader.GetString(1),reader[2].ToString(),reader["Faddress"].ToString());
  }
  showSplit();
  reader.Close();
  conn.Close();
 }
 
 //**************************************
 //*演示带参数查询的操作,使用SqlCilent
 //**************************************
 public void hasParamReader()
 {
  SqlCommand cmd;
  cmd = conn.CreateCommand();
  string sql = "select Fname,Fphone,Faddress from friend where Fid > @Fid";
  cmd.CommandText = sql;
  SqlParameter param = new SqlParameter("@Fid",SqlDbType.Int,4);
  param.Value = 15;
  cmd.Parameters.Add(param);
  conn.Open();
  //当关闭reader的时候同时关闭数据库连接
  SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  while(reader.Read())
  {
   Console.WriteLine("Name:{0}\tPhoneNum:{1}\tAddress:{2}",reader.GetString(0),reader.GetString(1),reader.GetString(2));
  }
  showSplit();
  //无需关闭conn,系统会自动调用这个方法来关闭conn的。
  reader.Close(); 
 }
 
 //**************************************
 //*演示带参数查询的操作,使用OleDb
 //**************************************
 public void hasOledbParamReader()
 {
  SqlCommand cmd;
  cmd = conn.CreateCommand();
  string sql = "select Fname,Fphone,Faddress from friend where Fid > ?";
  string oledbConnStr = "Provider=sqloledb;" + connStr;
  OleDbConnection oleConn = new OleDbConnection(oledbConnStr);
  OleDbCommand oleCmd = new OleDbCommand(sql,oleConn);
  oleCmd.Parameters.Add("nothing",15);
  oleConn.Open();
  OleDbDataReader oleReader = oleCmd.ExecuteReader();
  while(oleReader.Read())
  {
   Console.WriteLine("Name:{0}\tPhoneNum:{1}\tAddress:{2}",oleReader.GetString(0),oleReader.GetString(1),oleReader.GetString(2));
  }
  showSplit();
  oleReader.Close();
  oleConn.Close();
 }
 
 //**************************************
 //*演示存储过程的输出参数
 //**************************************
 public void outParamShow()
 {
  SqlCommand cmd;
  cmd = conn.CreateCommand();
  cmd.CommandText = "GetInfo";
  cmd.CommandType = CommandType.StoredProcedure;
  SqlParameter param = cmd.Parameters.Add("@Fid",16);
  param = cmd.Parameters.Add("@Fname",SqlDbType.VarChar,8);
  param.Direction = ParameterDirection.Output;
  param = cmd.Parameters.Add("@Fphone",SqlDbType.VarChar,8);
  param.Direction = ParameterDirection.Output;
  conn.Open();
  cmd.ExecuteNonQuery();
  string Fname = cmd.Parameters["@Fname"].Value.ToString();
  string Fphone = cmd.Parameters["@Fphone"].Value.ToString();
  Console.WriteLine(Fname + "  " + Fphone);
  conn.Close();
  showSplit();
 }
 
 //**************************************
 //*演示读取多个无关记录集
 //************************************** 
 public void multiResult()
 {
  SqlCommand cmd;
  cmd = conn.CreateCommand();
  string sqla = "select Fname from friend";
  string sqlb = "select Fphone from friend";
  cmd.CommandText = sqla + ";" + sqlb;
  conn.Open();
  SqlDataReader reader= cmd.ExecuteReader();
  int i = 1;
  do
  {
   Console.WriteLine("第" + i.ToString() + "个记录集内容如下:\n");
   while(reader.Read())
   {
    Console.WriteLine(reader[0].ToString() + "\t");
   }
   i++;
  }while(reader.NextResult()); //NextResult()移动到下一个记录集
  reader.Close();
  conn.Close();
  showSplit();
 }
 
 //**************************************
 //*使用DataReader获得数据库模式信息
 //************************************** 
 public void getSchema()
 {
  SqlCommand cmd;
  cmd = conn.CreateCommand();
  string sql = "select Fid,Fname,Fphone from friend";
     cmd.CommandText = sql;
     conn.Open();
     SqlDataReader reader = cmd.ExecuteReader();
     DataTable SchemaTable = reader.GetSchemaTable();
     
     DataRowCollection SchemaColumns = SchemaTable.Rows;
     DataColumnCollection SchemaProps = SchemaTable.Columns;  
     foreach(DataRow SchemaColumn in SchemaColumns)
     {
      foreach(DataColumn SchemaColumnProp in SchemaProps)
      {
       Console.WriteLine(SchemaColumnProp.ColumnName + "=" + SchemaColumn[SchemaColumnProp.ColumnName].ToString());
      }
     }
     reader.Close();
     conn.Close();
     showSplit();
 }
 
 //**************************************
 //*从数据库读取二进制数据的代码段
 //*该代码段只是读取二进制的片断,不是
 //*整个程序,所以不能执行,你可以把它
 //*集成到你的WinForm项目里面。
 //************************************** 
 public void getBinary()
 {
  /*
  System.IO.MemoryStream stream = new System.IO.MemoryStream();
  System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);  
  int BufferSize = 1024;
  byte[] Buffer = new Byte[BufferSize];
  long Offset = 0;
  long BytesRead = 0;
  do
  {
   BytesRead = reader.GetBytes(2,Offset,Buffer,0,BufferSize);
   writer.Writer(Buffer,0,(int)BytesRead);
   writer.Flush();
   Offset += BytesRead;
  }
  while(BytesRead == BufferSize);
  */
 }
 
 //添加输出分隔
 private void showSplit()
 {
  Console.WriteLine("\n********************************************************************\n");
 }
 
 public static void Main(string [] args)
 {
  SqlReader sqlreader = new SqlReader();
  
  sqlreader.basicReader();
  
  sqlreader.hasParamReader();
  
  sqlreader.hasOledbParamReader();
  
  sqlreader.outParamShow();
  
  sqlreader.multiResult();
  
  sqlreader.getSchema();
 } 
}

转载于:https://www.cnblogs.com/fuyingke/archive/2006/11/15/561268.html

一个程序详细研究DataReader(转)相关推荐

  1. 三菱伺服定长追剪,系统为Q172DSCPU,高级同步模式。 包含一个程序例子,有详细的机械参数分析,伺服参数设置

    三菱伺服定长追剪,系统为Q172DSCPU,高级同步模式. 包含一个程序例子,有详细的机械参数分析,伺服参数设置,以及追剪凸轮表设置的由来. ID:69100609575345770个人资料窝

  2. 三菱伺服定长追剪,系统为Q172DSCPU 包含一个程序例子,有详细的机械参数分析,伺服参数设置

    三菱伺服定长追剪,系统为Q172DSCPU,高级同步模式. 包含一个程序例子,有详细的机械参数分析,伺服参数设置,以及追剪凸轮表设置的由来. ID:69100609575345770个人资料窝

  3. 一个程序员的全部,并不是“技术”!知道为什么只能当码农吗?

    什么是程序员的全部? 程序员回答一定是技术啊,学技术.用技术.研究技术.但是今天我要告诉你的是:对于程序员而言技术是非常重要的,但是它不是一个程序员的全部. 接下来我们来详细聊聊: 一.技术性思维 技 ...

  4. repost 编程之路--一个程序员的艰辛经历

    如果对自身的发展迷茫,可以看看这篇文章,这里真实地记载了一个程序员走过的路. 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近 ...

  5. 一个程序员的奋斗经历

    2006-07-18 09:28 PS: 说实话 我也很想有文章中主人公的那样的经历...非常佩服..希望与朋友们一起共勉!! 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开, ...

  6. 一个程序员的奋斗路程

    首先声明我不是作者,这篇文章是我从我的QQ空间中专门拷过来的,因为我想用它来时刻提醒自己. 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微 ...

  7. 用VS2015开发Linux程序详细教程-配置篇

    VS2015推出了跨平台开发,其中包括了对Linux程序开发的支持,最近刚好需要开发Linux程序,对其进行了一些研究. 首先介绍下涉及到的开发工具 开发工具 VS2015Update3,下文简称VS ...

  8. 一个程序员多年的收藏

    程序员珍藏的东西会是什么?呵呵,除了平时写的代码,就是那些百看不厌的电子书了. 昨天很郁闷,我用了5年的移动硬盘,莫名奇妙的坏掉了.里面40G的资料全部报销了. 为了不再重蹈覆辙,我决定把重要的电子书 ...

  9. 一个程序员的多年珍藏--收藏

    2010 - 01 - 15 [置顶] 一个程序员的多年珍藏(1月23日最新更新) 文章分类:Java编程 程序员珍藏的东西会是什么?呵呵,除了平时写的代码,就是那些百看不厌的电子书了. 昨天很郁闷, ...

最新文章

  1. 网络工程师_记录的一些真题_2008下半年上午
  2. MATLAB中repmat是什么,在NumPy中,MATLAB的repmat是什么?
  3. jad 反编译java
  4. 双字节数据 先低后高_1.4 C++数据类型
  5. Python学习笔记之常用模块总结,持续更新...
  6. linux docker端口映射无法访问,docker设置了端口映射,不能访问的解决方案
  7. i78750h和i58300h对比哪个好
  8. 【嵌入式】51单片机最小系统以及蜂鸣器驱动电路
  9. 【Oracle】《Oracle Database 10g SQL 开发指南》中示例文件store_schema.sql的bug修复
  10. 新服务器网卡识别及地址设置
  11. 响铃:揭底滴滴们跨界营销“真相”,再教你玩一出好戏
  12. Linux 安装rabbitmq
  13. android 拦截鼠标按键
  14. JavaScript聊天器
  15. Oracle 实例恢复--转自沙弥的世界
  16. 花旗金融技术岗社招内推
  17. SoundNet:根据声音来识别场景环境实践
  18. 分享一些实用的小工具(Windows版)
  19. 深度学习学习笔记-论文研读4-基于深度强化学习的多用户边缘计算任务卸载调度与资源分配算法
  20. Java学习笔记16-多线程

热门文章

  1. RUNOOB python练习题19 找出1000以内的所有完数
  2. PostCSS 以及 cssnext语法
  3. jsonpickle数据序列化
  4. Qt QTcpSocket使用总结
  5. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)
  6. 第四章 大网高级   NSSA
  7. xor方程组消元 UVA 11542 Square
  8. DUMPE2FS(8)
  9. Windows Phone 的后台代理不支持的 API
  10. 优秀技术人才需具备能力