zoukankan      html  css  js  c++  java
  • 一个程序详细研究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();
     } 
    }



  • 相关阅读:
    windows系统切换jdk,修改java_home无效情况
    Cannot instantiate interface org.springframework.context.ApplicationListener
    MySQL分组查询获取每个学生前n条分数记录(分组查询前n条记录)
    ASP.NET Web API 使用Swagger生成在线帮助测试文档,支持多个GET
    EF TO MYSQL 无法查询中文的解决方法
    HttpWebRequest post请求获取webservice void数据信息
    This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms. 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分 解决方案
    MySQL 5.7.13解压版安装记录 mysql无法启动教程
    C# udpclient 发送数据断网后自动连接的方法
    汽车XX网站秒杀抢购代码
  • 原文地址:https://www.cnblogs.com/fuyingke/p/561268.html
Copyright © 2011-2022 走看看