我正在尝试通过C#与Notes数据库(我的个人邮件文件)进行交互,并且我被困在门外,尝试使用以下代码打开数据库:
string sNotesSourceFolder = "$Inbox";
string sUserName = "scady";
string sMailFile = @"NotesMail_FDrive\ARchives\" + sUserName + ".nsf";
string sServerName = @"Answers1/Answers";
string sPassword = "xxxxxx";
//Creating the notes session
NotesSession session = new NotesSession();
session.Initialize(sPassword);
NotesDatabase NotesDb = session.GetDatabase(sServerName, sMailFile, false);
//If the database is not already open then open it.
if (!NotesDb.IsOpen)
{
NotesDb.Open();
}
使用服务器名称和路径调用session.GetDatabase(),nsf文件返回null,这显然意味着它无法打开数据库。
我在本地运行此代码,针对名为" Answers1 / Answers"的Notes服务器。我现在正在考虑基于Notes服务器,nsf文件位于" NotesMail_FDrive \ ARchives \ xyz.nsf"的网络文件共享中。
答案 0 :(得分:1)
对不起,我在第一次通过时没有注意到这一点......
sMailFile的值不应为“\ 10.10.10.71 \ notesdata1 \ NotesMail \ ARchives \ scady.nsf”。您注释掉的其他两个值也是错误的。 getDatabase的参数是Domino服务器的可分辨名称和相对路径。没有服务器IP,没有卷,也没有“file:”前缀。就像这样:"archives\scady.nsf"
。当您在Notes客户端中打开数据库并调出数据库属性对话框时,它应该与您在路径中看到的完全相同。
上一个答案
您的sServername变量包含Domino服务器的可分辨名称。
但是你为什么要使用File.Exists? Domino服务器希望独占访问其数据树中的所有文件。如果您实际上是通过文件系统调用成功访问Domino服务器上的文件,那么您可能会锁定Domino服务器无法访问它。
但是:你在哪里运行这段代码?您是在同一台计算机上运行它,还是在通常用于阅读电子邮件的帐户下运行它?或者在另一台计算机和帐户上?
答案 1 :(得分:1)
文件所在的服务器是Notes服务器还是网络共享?
如果它是网络共享,则需要驱动器映射,但sServerName将“”到达“本地”驱动器。我假设Notesdata1是X上的一个目录,所以如果它是驱动器名称,请删除它。
string sMailFile = @"X:\Notesdata1\NotesMail\ARchives\scady.nsf";
string sServerName = @"";
如果它是Notes服务器并且Notesdata1是Notes服务器的数据目录,那么
string sMailFile = @"NotesMail\ARchives\scady.nsf";
string sServerName = @"Answers1/Answers";