Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103790057
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-20 21:32:50

作者:        文章来源:    

  检索标量值

  从数据库中检索数据可以通过实例化一个 DataReader 对象并使用 ExecuteReader 方法(它返回一个 OracleDataReader 对象)来实现。 通过将列名称或以零为基数的列序号传递给项属性 B.NET 开发人员可以访问返回的数据。 另一种选择是使用存取程序类型方法来返回列数据。

Dim dr As OracleDataReader = cmd.ExecuteReader() ' VB.NET 
dr.Read() 
Label1.Text = dr.Item("dname") ' retrieve by column name 
Label1.Text = dr.Item(0) ' retrieve the first column in the select list 
Label1.Text = dr.GetString(0) ' retrieve the first column in the select list 


  C# 开发人员必须使用存取器方法来检索数据。 有适当类型的存取程序用于返回 .NET 本地数据类型,其他的存取程序用于返回本地 Oracle 数据类型。 以零为基数的序号被传递给存取程序,以指定返回哪一列。

 
OracleDataReader dr = cmd.ExecuteReader(); // C# 
dr.Read(); 
label1.Text = dr.GetString(0); // C# retrieve the first column in the select list 


  在这个简化的例子中,dname 的返回值是一个字符串,它用来设置标签控件的文本的属性值(也是一个字符串)。 但如果检索的是 deptno,而不是字符串,那么将出现数据类型不匹配的情况。 当源数据类型与目标数据类型不匹配时,.NET 运行时将尝试隐式地转换数据类型。 有时数据类型不兼容,则隐式转换将失败,并跳出一个异常警报。 但即使可以进行隐式转换,使用显式数据类型转换仍比用隐式数据类型转换好。

  到整型的显式转换显示如下:

Label1.Text = CStr(dr.Item("deptno")) ' VB.NET integer to string cast 


  在隐式转换上,C# 的容错能力不如 VB.NET。 您必须自己执行显式转换:

string deptno = dr.GetInt16("deptno").ToString(); // C# 


  您可以显式地转换标量值以及数组。

  关闭并清除

  可以调用连接对象的 Close 方法或 Dispose 方法来关闭到数据库的连接。 Dispose 方法调用 Close 方法。

conn.Close() ' VB.NET 
conn.Dispose() ' VB.NET 

conn.Close(); // C# 
conn.Dispose(); // C# 


  作为可选项,C# 提供了一种在连接超出范围时自动清除连接的特殊语法。 使用 using 关键字可启用这一特性。

using (OracleConnection conn = new OracleConnection(oradb)) 
{ 
conn.Open(); 

OracleCommand cmd = new OracleCommand(); 
    cmd.Connection = conn; 
    cmd.CommandText = "select dname from dept where deptno = 10"; 
cmd.CommandType = CommandType.Text; 
  
 OracleDataReader dr = cmd.ExecuteReader(); 
    dr.Read(); 

    label1.Text = dr.GetString(0); 
} 


  您可以试验在上机操作 1(从数据库中检索数据)和上机操作 2(增加交互性)中学到的一些概念。

阅读(380) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~