检索标量值
从数据库中检索数据可以通过实例化一个 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(增加交互性)中学到的一些概念。