一個程序詳細研究DataReader(轉)

 <原文地址:http://www.cnblogs.com/xiongeee/archive/2007/03/23/684989.html>

//***********************************************************
//*名稱:一個程序詳細研究DataReader,同時顯示Command用法
//*功能:演示DataReader的各項操作。
//*說明:如果需要文字說明請查看我的BLOG裏面關於ado.net的文章
//*作者:雪冬寒
//*BOLG:[url]http://blog.csdn.net/bineon[/url]
//***********************************************************
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();
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章