返回首页

gbase数据、南大通用产品文档:GBase8aGBaseDataReader 类

更新日期:2024年09月11日

代表GBase 数据源中只进且只读的数据流,此类不能被继承。对于该类所
有成员的列表,参考 GBaseDataReader 成员。

继承层次
System.Object
|__ System.MarshalByRefObject
|__ System.Data.Common.DbDataReader
|__ GBase.Data.GBaseClient.GBaseDataReader


语法
[ Visual Basic ]
Public NotInheritable Class GBaseDataReader _

Inherits DbDataReader _

Implements IDataReader, IDisposable, IDataRecord
[ C# ]
public sealed class GBaseDataReader : DbDataReader,

IDataReader, IDisposable, IDataRecord

必要条件
命名空间:GBase.Data.GBaseClient

线程安全性
这个类型的公共静态成员(在Visual Basic 中为 Shared)对于多线程操
作是保证线程安全的,对于实例不保证线程安全性。

注释

GBase 8a 程序员手册ADO.NET 篇


- 204 -

南大通用数据技术股份有限公司
要创建一个GBaseDataReader,用户必须调用GBaseCommand 对象的
ExecuteReader 方法。
IsClosed 和 RecordsAffected 是唯一能够在GBaseDataReader 关闭后调
用的属性。尽管RecordsAffected 属性可以在GBaseDataReader 存在的任何时
间访问,也总是在调用了Close 之后才调用RecordsAffected 来保证获得准确
的返回值。
由于GBaseDataReader 提供只进的只读数据访问方式,如果用户试图修改
使用诸如GetValue 返回的数值,就会出现警告。

示例
下面的例子演示创建了GBaseDataReader 对象后,使用GBaseDataReader
对象读取数据并将结果打印到控制台。
[Visual Basic]
Public Sub ReadGsData(gsConnString As String)
Dim
gsSelectQuery
As
String
=
"SELECT
OrderID,
CustomerID
FROM"_
&"Orders"
Dim gsConnection As New GBaseConnection(gsConnString)
Dim gsCommand As New GBaseCommand(gsSelectQuery, gsConnection)
gsConnection.Open()
Dim gsReader As GBaseDataReader
gsReader = gsCommand.ExecuteReader()
' Always call Read before accessing data.
While gsReader.Read()
Console.WriteLine((gsReader.GetInt32(0) & ", " &_
gsReader.GetString(1)))
End While
' always call Close when done reading.
gsReader.Close()
' Close the connection when done with it.
gsConnection.Close()
End Sub 'ReadGsData




GBase 8a 程序员手册ADO.NET 篇
南大通用数据技术股份有限公司

- 205 -
[C#]
public void ReadGsData(string gsConnString)
{
string
gsSelectQuery
=
"SELECT
OrderID,
CustomerID
FROM
Orders";
GBaseConnection gsConnection = new
GBaseConnection(gsConnString);
GBaseCommand gsCommand = new
GBaseCommand(gsSelectQuery,gsConnection);
gsConnection.Open();
GBaseDataReader gsReader;
gsReader = gsCommand.ExecuteReader();
//Always call Read before accessing data.
while (gsReader.Read())
{
Console.WriteLine(gsReader.GetInt32(0) + ", " +
gsReader.GetString(1));
}
// always call Close when done reading.
gsReader.Close();
// Close the connection when done with it.
gsConnection.Close();
}

动程序。
重要: UNIX 平台的 GBase 8s Driver Manager Replacement (DMR) 不会在 Unicode 和 ANSI
API 之间进行映射。

本节描述如何创建标准的或临时的智能大对象空间、监视元数据或用户数据区域、向智能
大对象空间添加块以及更改智能大对象的存储特征。
有关监视智能大对象空间的信息,请参阅监视存储空间。

创建智能大对象空间
使用 onspaces 实用程序创建智能大对象空间。
使用 onspaces 实用程序或 Server Administrator (ISA) 可创建智能大对象空间。
要使用 onspaces 创建智能大对象空间,请执行以下操作:

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 211 -
1. 要在 UNIX™ 上创建智能大对象空间,必须以用户 gbasedbt 或 root 身份登录。
2. 请确保数据库服务器处于联机、管理或静默方式,或者处于快速恢复方式的清除阶
段。
3. 使用 onspaces -c -S 选项创建智能大对象空间。
a.
使用 -p 选项指定路径名、使用 -o 选项指定偏移量,以及使用 -s 选
项指定智能大对象空间大小。
b.
如果要对智能大对象空间制作镜像,请使用 -m 选项指定镜像路径和
偏移量。
c.
如果您希望使用智能大对象空间的缺省存储特征,
那么省略 -Df 选项。

如果您希望指定不同的存储特征,请使用 -Df 选项。有关更多信息,请参阅
智能大对象空间的存储特征。
d.
智能大对象空间中的第一个块必须具有元数据区域。
您可以为智能大对象空间指定元数据区域,或让数据库服务器计算元数据区域
的大小。有关更多信息,请参阅计算智能大对象空间元数据的大小。
4. 在创建智能大对象空间之后,必须对根数据库空间和新智能大对象空间执行 0 级
备份。
5. 要在该智能大对象空间中开始存储智能大对象,
请在 SBSPACENAME 配置参数中
指定空间名称。
6. 使用 onstat -d、onstat -g smb s 以及 oncheck -cs、-cS、-ps 或 -pS 来显示有关智能
大对象空间的信息。
有关更多信息,请参阅监视智能大对象空间。
这显示了如何创建 20 兆字节的镜像智能大对象空间 sbsp4。为主块和镜像块均指定 500
KB 的偏移量,还指定偏移量为 200 KB 且大小为 150 KB 的元数据。AVG_LO_SIZE -Df
标记指定 32 KB 的智能大对象平均期望大小。
onspaces -c -S sbsp4 -p /dev/rawdev1 -o 500 -s 20480 -m /dev/rawdev2 500
-Ms 150 -Mo 200 -Df "AVG_LO_SIZE=32"
有关创建智能大对象空间和智能大对象缺省选项的信息,请参阅《GBase 8s 管理员参考》
中有关 onspaces 实用程序的信息。有关创建智能大对象的信息,请参阅《GBase 8s
DataBlade API 程序员指南》和《GBase 8s ESQL/C 程序员手册》。
要使用 ISA 创建智能大对象空间,请执行以下操作:
1. 使用 ISA 创建智能大对象空间。有关更多信息,请参阅 ISA 联机帮助。
2. 备份新智能大对象空间和根数据库空间。

计算智能大对象空间元数据的大小
智能大对象空间的第一个块必须有元数据区域。
在向智能大对象空间添加智能大对象和块
时,元数据区域会增大。另外,数据库服务器保留 40% 的用户区域,在元数据区域空间
耗尽的情况下使用。
为智能大对象空间正确估算元数据区域以确保智能大对象空间不会耗尽元数据空间,这一
点很重要。您可以使用以下方法之一:

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 212 -

让数据库服务器为新智能大对象空间块计算元数据区域的大小。

明确指定元数据区域的大小。
有关估计智能大对象空间和元数据区域的大小的指示信息,请参阅《GBase 8s 性能指南》
中的表性能注意事项章节。另见监视元数据和用户数据区域。

向智能大对象空间添加块
可以将块添加到智能大对象空间或临时智能大对象空间。
您可以为块指定元数据区域、让数据库服务器计算元数据区域或者将块仅用于用户数据。
要使用 onspaces 将块添加到智能大对象空间,请执行以下操作:
1. 请确保数据库服务器处于联机、管理或静默方式,或者处于快速恢复方式的清除阶
段。
2. 使用 onspaces -a 选项创建智能大对象空间块。
a.
使用 -p 选项指定路径名、使用 -o 选项指定偏移量,以及使用 -s 选
项指定块大小。
b.
如果您希望对块制作镜像,请使用 -m 选项指定镜像路径和偏移量。
c.
要指定元数据空间的大小和偏移量,请使用 -Mo 和 -Ms 选项。
数据库服务器在新块上分配指定量的元数据区域、
d.
要让数据库服务器为新块计算元数据大小,那么省略 -Mo 和 -Ms 选
项。
数据库服务器按用户数据区域大小划分智能大对象的估计平均大小。
e.
要将块仅用于用户数据,请指定 -U 选项。
如果您使用 -U 选项,那么数据库服务器不会在该块中分配元数据空间。取而
代之,智能大对象空间使用一个其他块中的元数据区域。
3. 在将块添加到智能大对象空间后,数据库服务器将编写 CHRESERV 和
CHKADJUP 日志记录。
4. 对根数据库空间和智能大对象空间执行 0 级备份。
5. 使用 onstat -d 和 oncheck -pe 可监视智能大对象空间块中的可用空间量。
此示例向 sbsp4 添加 10 兆字节的镜像块。
对主块和镜像块都指定了 200 KB 的偏移量。
如果您不添加镜像块,那么可省略 -m 选项。-U 选项指定新块仅包含用户数据。
onspaces -a sbsp4 -p /dev/rawdev1 -o 200 -s 10240 -m /dev/rawdev2 200 -U
还可以定义当应用程序需要更多存储空间时,GBase 8s 可用于自动扩展块大小的信息。如
果有可扩展块,那么无需添加新块或耗费时间来尝试确定哪种存储空间(数据库空间、临
时数据库空间、智能大对象空间、临时智能大对象空间或 BLOB 空间)将耗尽空间,以及
何时将耗尽空间。
当启用 CHUNK_OVERLAP_PROTECTION 配置参数时,数据库服务器将确保新块不会与
其他块重叠。如果服务器发现块重叠,新块添加操作将失败。

更改智能大对象的存储特征

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 213 -
使用 onspaces -ch 命令为智能大对象空间更改以下缺省存储特征:

扩展数据块大小

平均智能大对象大小

缓冲方式

上次访问时间

锁定方式

日志记录
有关更多信息,请参阅智能大对象空间的存储特征和《GBase 8s 性能指南》中有关表性能
注意事项主题中的管理智能大对象空间的部分。

创建临时智能大对象空间
有关确定智能大对象存储位置的背景信息和规则,请参阅临时智能大对象空间。您可将临
时智能大对象存储在标准的或临时的智能大对象空间中。可以在临时智能大对象空间中添
加或删除块。
要创建具有临时智能大对象的临时智能大对象空间,请执行以下操作:
1. 为临时智能大对象空间分配空间。
有关详细信息,请参阅分配磁盘空间。
有关 SBSPACETEMP 的信息,请参阅《GBase 8s 管理员参考》中有关配置参数
的主题。
2. 如以下示例所示,创建临时智能大对象空间:
onspaces -c -S tempsbsp -t -p ./tempsbsp -o 0 -s 1000
3. 您可任意指定以下 onspaces 选项:
a.
指定元数据区域和偏移量(-Ms 和 -Mo)。
b.
指定存储特征 (-Df)。
无法为临时智能大对象空间打开日志记录。
4. 将 SBSPACETEMP 配置参数设置为缺省临时智能大对象空间存储区域的名称。
重新启动数据库服务器。
5. 使用 onstat -d 显示临时智能大对象空间。
有关 onstat
-d 输出示例的信息,
请参阅
《GBase
8s 管理员参考》
中的 onstat 实
用程序。
6. 在创建临时智能大对象时指定 LO_CREATE_TEMP 标志。
使用 DataBlade API:
mi_lo_specset_flags(lo_spec,LO_CREATE_TEMP);
使用 GBase 8s ESQL/C:
ifx_lo_specset_flags(lo_spec,LO_CREATE_TEMP);

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 214 -
有关创建智能大对象的信息,请参阅《GBase 8s DataBlade API 程序员指南》和《GBase 8s
ESQL/C 程序员手册》。