一个程序详细研究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
總結
以上是生活随笔為你收集整理的一个程序详细研究DataReader(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: java服务器 c 服务器_c 编写
- 下一篇: DML语言DDL
