一个程序详细研究DataReader(转)

//***********************************************************
//*名称:一个程序详细研究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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的世界java笔刷指令_《我的世界》基本笔刷教程

《我的世界》是一款3D的第一人称沙盘游戏,所呈现的世界并不是华丽的画面与特效,而是注重在游戏性上面。玩家在游戏中做着建设与破坏两件事,但是透过像乐高一样的积木来组合与拼凑,轻而易举的就能制作出小木屋、城堡甚至城市&#…

[vue] vue中是如何使用event对象的?

[vue] vue中是如何使用event对象的? click“func” 默认第一个参数传入event对象 click"func(0, $event)" 如果自己需要传入参数和event对象,则需要使用$event来获取event对象并传入func个人简介 我是歌谣,欢迎和大家一起交流前后…

idea创建springcloud主工程和springboot子项目

创建主工程,选择file-new-project,选择maven,直接next 填写GroupId包名,ArtifactId项目名,next-finish 创建子项目springboot,项目右击-new-module-Spring Initializr-->next 填写项目相关信息,next 选择Clou…

全硬盘安装Win Vista 6000 RTM方法(转)

全硬盘安装Win Vista 6000 RTM方法 转自:http://os.yesky.com/windowsvista/13/2667013.shtml 作者:出处:cnBeta责任编辑: 原野 [ 2006-11-14 10:18 ]这次网络流传的Windows Vista RTM 英文版不能在硬盘虚拟加载安装,终…

mysql数据库及应用_mysql数据库介绍及应用

一、数据库定义数据库系统DataBseSystem数据库管理系统(DBMS,DateBaseManangementSystem)数据库(DataBase)管理员DBSDBMSDB定义:对大量信息进行管理的高效解决方案,按照数据结构来组织、存储和管理数据的库关系型数据库系统(对应的是非关系型…

js原生实现点击事件只创建一个元素

问题&#xff1a;注册点击事件的时候&#xff0c;多次点击则会重复多次的创建元素 要求&#xff1a;不论点击多少次&#xff0c;只创建一次 思路&#xff1a;触发点击事件&#xff0c;若有&#xff0c;则不创建&#xff0c;若无&#xff0c;则创建 基础HTML代码如下: <!DOCT…

[vue] ajax、fetch、axios这三都有什么区别?

[vue] ajax、fetch、axios这三都有什么区别&#xff1f; ajax, 实际上就是xmlHttpRequest, 旧瓶装新酒的一种新应用的称呼 fetch是新出的规范, 具体实现原理不太清楚, 但是内部返回的是一个Promise axios是基于ajax的再次封装返回的也是Promise个人简介 我是歌谣&#xff0c;…

Java路径问题最终解决方案使用演示

Java路径问题最终解决方案使用演示前言在《Java路径问题最终解决方案—可定位所有资源的相对路径寻址》一文中&#xff0c;我给大家提供了一个助手类ClassLoaderUtil &#xff0c;和它的public static URL getExtendResource(String relativePath)方法。这个方法能够接受“../”…

小程序实现无限瀑布流

实现瀑布流 实现效果 有好几种方案 1.用column-count属性把页面元素分为俩列或多列来实现 2.用display flex 分列来展示页面 3.比如说用js实现 我今天介绍的就是第三种&#xff0c;因为前两种都会有局限&#xff0c;实现的效果我们希望是左右左右&#xff0c;而不是分成两列去显…

python canny检测_【数字图像分析】基于Python实现 Canny Edge Detection(Canny 边缘检测算法)...

Canny 边缘检测算法Steps:高斯滤波平滑计算梯度大小和方向非极大值抑制双阈值检测和连接代码结构&#xff1a;Canny Edge Detection|Gaussian_Smoothing||convolution.py|||convolution()||gaussion_smoothing.py|||dnorm()|||gaussian_kernel()|||gaussian_blur()|Sobel_Filte…

目标和执行

信息系统可以给各行各业带来巨大的价值&#xff0c;因为它可以取代很多手工劳动&#xff0c;并且代价很低&#xff0c;另外很多原来无法做到的事情都可以借助信息系统完成。因此&#xff0c;在IT业里&#xff0c;可以说机会很多&#xff0c;各种行业都需要开发信息系统&#xf…

[vue] 你了解vue的diff算法吗?

[vue] 你了解vue的diff算法吗&#xff1f; 我的理解:计算出虚拟 DOM 中真正变化的部分,并且只针对该部分进行 DOM 更新,而非重新渲染整个页面个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 …

java 拖放文字_myeclipse2014如何实现jsp中的html代码的文字拖放

本帖最后由 liyihongcug 于 2015-3-5 16:53 编辑把 jsp打开 (visual jsp editor)之后上班区 单击右键 show --- pallette就可以了感叹myeclipse确实强大的 标签技术强于.net mvc强。vs2013能实现iis无需安装的情况下 动态指定 某个页面为首选 启动 --------------------希望2…

leetcode 二叉树的层次遍历 II(Binary Tree Level Order Traversal II)

目录 题目描述&#xff1a;示例&#xff1a;解法&#xff1a;题目描述&#xff1a; 给定一个二叉树&#xff0c;返回其节点值自底向上的层次遍历。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 示例&#xff1a; 给定二叉树 [3…

[vue] vue首页白屏是什么问题引起的?如何解决呢?

[vue] vue首页白屏是什么问题引起的&#xff1f;如何解决呢&#xff1f; 1.打包后文件引用路径不对&#xff0c;导致找不到文件报错白屏 2.路由模式mode设置影响个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家…

一篇极好的 CSS 教程

这是我codeproject上面看到的极好的css教程&#xff0c;今日放上让大家看看&#xff0c;待我明日青岛归来翻译给大家看看。CSS stands for Cascading Style Sheets. This is a simple styling language which allows attaching style to HTML elements. Every element type as …

python增强对比度_python增加图像对比度的方法

python增加图像对比度的方法来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2019年11月5日【下载文档: python增加图像对比度的方法.txt 】(友情提示:右键点上行txt文档名->目标另存为)python增加图像对比度的方法本代码实现的是&#xff0c;在旋转…

因缺思厅的绕过

看一下页面源码&#xff0c;看到source.txt。所以进入同目录下的source.txt 代码审计下&#xff0c;并且百度了一些函数。过滤了很多关键字&#xff0c;因此常规的SQL注入没有头绪。想了挺久&#xff0c;因为要满足三个条件。1&#xff1a;不能输入过滤的关键字2&#xff1a;只…

[vue] vue能监听到数组变化的方法有哪些?为什么这些方法能监听到呢?

[vue] vue能监听到数组变化的方法有哪些&#xff1f;为什么这些方法能监听到呢&#xff1f; 你说的是vue内部的源码对Array数据的中转代理嘛 好像对push, shift等通用方法都做了代理吧! 因为它对中转的数据都做了监听个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知…

Python自制微信机器人:群发消息、自动接收好友

运营公众号也有半年了&#xff0c;今年5月份开始的&#xff0c;之前一直用一款windows工具来运营自动接受好友请求、群发文章、自动回复等操作&#xff0c;但颇有不便。 举几个场景&#xff1a; 突然在外面看到一篇文章很好&#xff0c;临时写了一篇&#xff0c;想群发一下。好…