错误处理
正如错误处理页面中所解释的那样,C# 类方法可能不返回任何值(void)、返回一个表示对象自动 ID 的长整型值,或者返回一个表示成功或失败的布尔值。这些返回代码的常规处理方式很简单。例如:
if (cursor.Search(Operation.GreaterThan, search_value))
{
foreach (Obj o in cursor)
{
Console.Write("(" + o.value + ") ");
}
}
这里,由 Cursor 方法 Search() 返回的布尔值 true 会触发 foreach() 循环的执行。并且:
[Persistent(AutoID = true)]
class Department
{
[Indexable(Type=Database.IndexType.BTree, Unique=true)] // Declare unique tree index by "code" field
public String code;
public String name;
}
...
long autoid = con.Insert(dept);
这里,带有属性 [Persistent(AutoID = true)] 的类 Department 的定义表明,对象 autoid 将从 Connection 方法 Insert() 中返回。
致命的错误处理
然而,每当出现致命错误时,都会抛出一个异常,指出错误的来源。在适当的地方,应使用 try-catch 块来处理这些异常,将其作为 DatabaseError 对象,其 errorCode 属性包含整数形式的错误代码。这些返回代码的含义在 mco.h 中定义。(请参阅 C API 返回代码以获取完整列表。)
例如,以下是一个典型的 try-catch 块,用于处理打开数据库时可能出现的错误:
try
{
db.Open("opendb2", parameters2, devs); // Open In-Memory database.
ShowRuntimeInfo(db2);
}
catch (DatabaseError dbe)
{
// Code 66 means duplicate instance. Valid case for SHM configuration
if (dbe.errorCode != 66)
{
throw dbe;
}
}