从处理程序调用时,MongoDB不会收到插入/保存

时间:2012-03-12 11:10:48

标签: mongodb mongodb-.net-driver

我(似乎)无法从处理程序(按下按钮)写入mongoDB。 如果我删除代码并在Main中的控制台应用程序中运行它,它可以工作......

这是班级

class TimeRegistration
{
    public ObjectId _id { get; set; }
    public string Name { get; set; }
    public DateTime Date { get; set; }
    public string Project { get; set; }
    public string Werk { get; set; }
    public string Shot { get; set; }
    public double Uren { get; set; }
    public string Opmerkingen { get; set; }

}

这是按钮处理程序的主体

private void buttonLog_Click(object sender, EventArgs e)
{
    string connectionString = "mongodb://localhost";
    MongoServer server = MongoServer.Create(connectionString);
    MongoDatabase db = server.GetDatabase("timeregistration");

    var logs = db.GetCollection<TimeRegistration>("logs");

    foreach( DataGridViewRow dgRow in dataGridViewLog.Rows)
    {
        if (dgRow.Cells[0].Value == null) continue;

        TimeRegistration log = new TimeRegistration();

        log.Name = Environment.UserName;
        log.Date = dateTimePickerLog.Value;

        if (dgRow.Cells[0].Value != null) log.Project       = dgRow.Cells[0].Value.ToString();
        if (dgRow.Cells[1].Value != null) log.Werk          = dgRow.Cells[1].Value.ToString();
        if (dgRow.Cells[2].Value != null) log.Shot          = dgRow.Cells[2].Value.ToString();
        if (dgRow.Cells[3].Value != null) log.Uren          = Convert.ToDouble(dgRow.Cells[3].Value);
        if (dgRow.Cells[4].Value != null) log.Opmerkingen   = dgRow.Cells[4].Value.ToString();

        logs.Save(log);//, saveOptions);   
    }
}

所以我的问题是为什么它会在控制台应用程序的主内部运行,而不是在我的winforms应用程序中的按钮处理程序内运行。

谢谢!

Edit1:我确定这不是防火墙问题。

Edit2:将它从处理程序中取出并放入它自己的类中使它工作。尽管如此,仍然没有任何线索。

1 个答案:

答案 0 :(得分:0)

这可能是您的Mongo司机吞咽异常。可以为不同的操作指定不同的写入关注点,最低的关注点可以吞噬所有操作。

尝试calling getLastError()(或C#等价物 - 我来自Java世界),看看出了什么问题。

对Java的编写问题详细here