0

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

我已经使用 COM 互操作来访问dto2.dllCOM 库,并阅读了示例,但我在创建数据库时遇到了问题。这是我正在使用的代码的摘要。

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);

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

有没有人成功做到这一点?我究竟做错了什么?

4

1 回答 1

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.");
于 2013-01-24T15:27:51.347 回答