2012-03-12 2 views
0

ハンドラからmongoDBに(一見)書き込みできません。 私はコードを除去し、それが動作主でコンソールアプリでそれを実行すると...ハンドラから呼び出されたとき、MongoDBは挿入/保存を受け取りません。

ここでクラスが

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:それをハンドラから取り出して、それ自身のクラスに入れて、それを動作させます。まだ何故か分からない。

+0

ハンドラから機能しないときにエラーが発生しましたか?スタックトレースはありますか? –

+0

what-so-everエラーはありません。しかし、SaveResultはnullを返すので、saveメソッドを呼び出せないように見えます。私は今それをハンドラ(saveClass)から取り出して、うまく動作します。 – JHN

+1

@JHN:コンソールアプリケーションの実行後にデータベースにあるものを表示できますか?また、コンソールアプリケーションを2回実行し、データベース内の2つのレコードを表示できますか? –

答えて

0

これはあなたのMongoドライバが例外を飲み込んでいる可能性があります。異なる操作に異なる書き込み問題を指定することは可能であり、最も懸念されることはすべてを呑み込むことになります。

お試しくださいcalling getLastError()(またはC#と同等です - 私はJavaの世界です)何が間違っているかを確認してください。

Javaに関する懸念事項はhereです。

関連する問題