OscarDataReader¶
OscarDataReader
对象提供一种获取数据存储区中数据的高性能方法,它提供一个只进只读的服务器端游标.
OscarDataReader 对象包含一个将数据读入其缓冲区的 Read
方法,该方法一次只能读取一行数据,这意味着在处理数据之前,不必将所有的数据都读入应用程序中.
OscarDataReader
是一个无缓冲的数据流,该允许过程逻辑有效地按顺序处理来自数据源的结果.在获取大量的数据时,最好选择OscarDataReader.在使用完OscarDataReader
对象时,必须调用 Close 方法并关闭 OscarDataReader
对象的数据库连接; 否则连接只有在垃圾回收器收集该对象时才关闭.
在调用 OscarCommand 的 ExecuteReader 方法时,我们可以使用
CommandBehavior
的枚举值作为参数.例如CommandBehavior.CloseConnection
枚举值作为参数,在调用 OscarDataReader 的 Close
方法时要自动关闭数据库连接.
示例
static void Main(string[] args)
{
using (var connect = new OscarConnection("Server=10.1.1.66;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;"))
{
connect.Open();
using (var command = connect.CreateCommand())
{
try
{
command.CommandText = "CREATE TABLE MY_TABLE (ID INT, NAME VARCHAR(16), AGE INT, SEX BOOLEAN, MARK TIMESTAMP)";
command.ExecuteNonQuery();
command.CommandText = "INSERT INTO MY_TABLE VALUES (@id,@name,@age,@sex,@mark)";
command.Parameters.Add(new OscarParameter("id", OscarDbType.Int) { Value = 1 });
command.Parameters.Add(new OscarParameter("name", OscarDbType.VarChar) { Value = "小张" });
command.Parameters.Add(new OscarParameter("age", OscarDbType.Int) { Value = 20 });
command.Parameters.Add(new OscarParameter("sex", OscarDbType.Boolean) { Value = true });
command.Parameters.Add(new OscarParameter("mark", OscarDbType.TimeStamp) { Value = DateTime.Now });
var result = command.ExecuteNonQuery();
command.Parameters.Clear();
command.CommandText = "SELECT * FROM MY_TABLE";
using (OscarDataReader reader = command.ExecuteReader())
{
Console.WriteLine("ID NAME AGE SEX MARK");
while (reader.Read())
{
var vals = new object[5];
reader.GetValues(vals);
Console.WriteLine("{0} {1} {2} {3} {4}", vals);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
command.CommandText = "DROP TABLE MY_TABLE";
command.ExecuteNonQuery();
}
}
}
}
引用