DataReader 操作方法 可用性强,不占内存

1 篇文章 0 订阅

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} Name:{1} PhoneNum:{2}, Address:{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} PhoneNum:{1} Address:{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} PhoneNum:{1} Address:{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() + "个记录集内容如下: ");
    while(reader.Read())
    {
    Console.WriteLine(reader[0].ToString() + " ");
    }
    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(" ******************************************************************** ");
   }
   
   public static void Main(string [] args)
   {
   SqlReader sqlreader = new SqlReader();
   
   sqlreader.basicReader();
   
   sqlreader.hasParamReader();
   
   sqlreader.hasOledbParamReader();
   
   sqlreader.outParamShow();
   
   sqlreader.multiResult();
   
   sqlreader.getSchema();
   } 
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值