打开前如何检查Domino数据库是否存在?

时间:2019-08-20 04:04:10

标签: c# lotus-domino

我有一个读取很多Domino数据库的应用程序。这些数据库在主数据库和链接到主数据库的一些文件柜(或子数据库)之间划分。

但是这些数据库没有附加相同数量的机柜。从1到15。 由于需要读取所有这些文件(当前有93个数据库),因此我曾经列出了nsf文件的所有路径并逐一读取它们。但是,机柜的数量会随着时间而变化,这意味着我需要定期检查是否需要添加新文件。我不想那样做... 因此,我想出了另一种方法:我只列出了nsf文件名的模板(所有文件柜都命名为database00.nsf, database01.nsf, etc,因此在运行时以及尝试打开数据库时很容易生成这些文件名,得到一个COMException,我假设该数据库不存在,并将其从我的列表中删除。 但!这太慢了,绝对不是一个好习惯!

这是我目前拥有的。 _listDBs保存着数据库的nsf文件的路径列表,而tmplist是临时列表,以后将用于清理_listDbs

foreach (var pair in _listDBs)
{
    try
    {
        NotesDatabase notedb = _notesSession.GetDatabase(_lotusRoot, pair.Value);
        //other stuff here, not important
    }
    catch (System.Runtime.InteropServices.COMException ex)
    {
        tmplist.Add(pair);
    }
}

我必须等待引发COMException来识别数据库不存在。 我希望先检查nsf文件是否存在。但是我找不到办法。我找不到一种以不同方式浏览Domino服务器的方法。 有线索吗? 非常感谢!

1 个答案:

答案 0 :(得分:3)

没有尝试不打开数据库就无法确定数据库是否存在的100%方法。您可以浏览catalog.nsf中的文档,并检查路径是否存在,但是此数据库仅每晚更新一次,在您检查时可能已过期。

但是:您可以采用另一种方法:使用NotesDbDirectory,遍历它,并检查数据库的文件路径(如果它们与您的列表匹配)。

NotesDbDicrectory包含服务器上的所有数据库,并且循环非常快。

由于我不熟悉c#,因此这里是从Designer帮助中获取的Visual Basic COM示例

Dim s As New NotesSession
s.Initialize
Dim dir As NotesDbDirectory
Dim db As NotesDatabase
Set dir = s.GetDbDirectory("Snapper")
Set db = dir.GetFirstDatabase(NOTES_DATABASE)
While Not (db Is Nothing)
  ˋCheck db.Filename or db.Filepath here
  Set db = dir.GetNextDatabase
Wend