從一個(gè)程序出發(fā)詳細(xì)研究DataReader

字號(hào):

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();
     }
     //**************************************
     //*演示帶參數(shù)查詢(xún)的操作,使用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();
    //當(dāng)關(guān)閉reader的時(shí)候同時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接
    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();
    //無(wú)需關(guān)閉conn,系統(tǒng)會(huì)自動(dòng)調(diào)用這個(gè)方法來(lái)關(guān)閉conn的。
    reader.Close();
     }
     //**************************************
     //*演示帶參數(shù)查詢(xún)的操作,使用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();
     }
     //**************************************
     //*演示存儲(chǔ)過(guò)程的輸出參數(shù)
     //**************************************
     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();
     }
     //**************************************
     //*演示讀取多個(gè)無(wú)關(guān)記錄集
     //**************************************
     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() + "個(gè)記錄集內(nèi)容如下:\n");
     while(reader.Read())
     {
     Console.WriteLine(reader[0].ToString() + "\t");
     }
     i++;
    }while(reader.NextResult()); //NextResult()移動(dòng)到下一個(gè)記錄集
    reader.Close();
    conn.Close();
    showSplit();
     }
     //**************************************
     //*使用DataReader獲得數(shù)據(jù)庫(kù)模式信息
     //**************************************
     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();
     }
     //**************************************
     //*從數(shù)據(jù)庫(kù)讀取二進(jìn)制數(shù)據(jù)的代碼段
     //*該代碼段只是讀取二進(jìn)制的片斷,不是
     //*整個(gè)程序,所以不能執(zhí)行,你可以把它
     //*集成到你的WinForm項(xiàng)目里面。
     //**************************************
     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();
     }
    }