2016-10-28 18 views
1

私は数日前にNeo4jデータベースを使用し始めましたが、.NETドライバではわからない問題が発生しました。Neo4j .NETドライバのエラー処理

using (var driver = GraphDatabase.Driver("bolt://localhost", AuthTokens.Basic("neo4j", "neo4j"))) 
using (var session = driver.Session()) 
{ 
    foreach(...) 
     { 
     // Build cypher query 
     string cypher_query = "..."; 

     try 
     { 
      session.Run(cypher_query).Consume(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Failed running query : " + cypher_query + "\r\n" + e.Message); 
     } 
    } 
} 

私は、foreachループ内(すべてのクエリをMERGEある)CYPHERクエリの多くを実行する必要があります。私はこのようなコードを持っています。私の問題は、すべてのクエリが最初の例外を取得した後に失敗したことです。

私がコンソールに表示するものを見ると、cypher_query変数には正しいものが含まれており、各繰り返しで変更されますが、例外メッセージは常に同じです。

私はデバッグ時にクエリが正しく実行されたと感じますが、とにかくcatch節を実行します。

ここで何が起こる可能性がありますか?

+0

彼は例外です。質問を編集して追加してください。 –

+0

私のコードを変更して、今すぐ動作するようにしました。例外は何かを覚えていません。これは解決策としてはあまり良いことではありません。なぜなら、私はcatch節でセッションを廃棄して再作成し続けることができるからです。残念ながら、私のプロジェクトは現時点では保留になっており、私はそれに取り組むことができません。ありがとう。 – user1923976

答えて

1

私はこれが古くなっていることを認識していますが、例外によってセッションが無効な状態になるためです。

は、このコードは、問題を表示するために実行し、最初のラッパー・メソッド:あなたはそれを変更した場合

using (var driver = GraphDatabase.Driver("bolt://localhost", AuthTokens.Basic("neo4j", "neo4j"))) 
{ 
    var session = driver.Session(); 
    ExecuteCypher(driver, session, "Broken Cypher"); 
    ExecuteCypher(driver, session, "Match (x) RETURN count(x)"); 
    session.Dispose(); 
}  

仕事は、それはdoesnのだろうので、どちら:あなたは次のように呼び出す

public static void ExecuteCypher(IDriver driver, ISession session, string cypher, bool createNewSessionOnException = true) 
{ 
    try 
    { 
     //Attempt to run the cypher... 
     session.Run(cypher).Consume(); 
    } 
    catch (Exception e) 
    { 
     //Write out error caught 
     Debug.WriteLine("Caught Exception: {0}", e.ToString()); 

     //If we should create a new session 
     if (createNewSessionOnException) 
     { 
      //first clear up the old one 
      session.Dispose(); 

      //Create new one 
      Console.WriteLine("New Session"); 
      session = driver.Session(); 
     } 
    } 
} 

新しいセッションを作成すると例外が発生します:

using (var driver = GraphDatabase.Driver("bolt://localhost", AuthTokens.Basic("neo4j", "neo4j"))) 
{ 
    var session = driver.Session(); 
    ExecuteCypher(driver, session, "Broken Cypher", false); //<-- here 
    ExecuteCypher(driver, session, "Match (x) RETURN count(x)"); 
    session.Dispose(); 
}  
+0

プレリリースバージョン(1.1x)を追加するだけで、実際には 'session.Reset()'を呼び出してこの問題を回避することができます:) –

+0

この回答をお寄せいただきありがとうございます。問題は、セッションが例外の後で無効な状態になる理由です:-) – user1923976

+0

私は、1.0のドライバが例外を認識していないと思っています。それまでは、サーバはクライアントにそれを送信しようとします関係なく。 –

関連する問題