使用分布式调整对象(DTO)创建普及数据库

时间:2013-01-24 08:10:36

标签: com-interop pervasive

我正在用C#(.NET 4.0)编写一个应用程序,它必须与另一个更老的应用程序集成。部分要求是与使用Pervasive PSQL Version 9的更旧的程序集成。我问了this关于访问数据库而不必安装ODBC DSN的问题。部分答案(非常感谢)是我需要使用DTO创建数据库。

我使用COM互操作来访问dto2.dll COM库,并已阅读样本,但我在创建数据库时遇到问题。以下是我正在使用的代码的摘要。

var session = new DtoSession();
var result = session.Connect("localhost", "", "");
Assert.AreEqual(dtoResult.Dto_Success, result);

testDB = new DtoDatabase {
    Session = session,
    Name = "Test1",
    Ddfpath = @"C:\TEMP\DATA\DDF",
    DataPath = @"C:\TEMP\DATA",
};

result = session.Databases.Add(testDB);
Assert.AreEqual(dtoResult.Dto_Success, result);

无论我为Name和路径使用什么值,最终Assert总是失败。错误代码为Dto_errDuplicateName。如果我不包含Session属性,我会得到不同的错误代码(7039)。

有没有人成功完成这项工作?我做错了什么?

1 个答案:

答案 0 :(得分:1)

我相信你错过了Flags对象的DtoDatabase属性。我在我的存档中有以下代码作为使用DTO添加数据库的示例。这段代码可能是在DTO首次发布时写的,但是它可以正常工作,唯一的区别就是Flags属性。

DtoSession session = new DtoSession();
dtoResult result;
result = session.Connect("localhost", "","");
if (result != dtoResult.Dto_Success)
{
    Console.WriteLine("Error connecting. Error code: " + result.ToString());
    return;
}
DtoDatabase testDB = new DtoDatabase();
testDB.Name = "Test1";
testDB.DataPath = @"C:\DATA";
testDB.DdfPath = @"C:\DATA";
testDB.Flags = dtoDbFlags.dtoDbFlagNotApplicable;
result = session.Databases.Add(testDB);
if (result != dtoResult.Dto_Success)
{
    Console.WriteLine("Error Adding. Error code: " + result.ToString());
    return;
}
Console.WriteLine("DB Added.");