2011-07-28 5 views
2

私が働く会社は、MySQLをバックエンドとしてC#ASP .Netフロントエンドで使用する予定のプロジェクトがあります。私は一緒にテストアプリケーションとデータベースを投げた、そして、私は任意のprocを呼び出すしようとする場合を除いて、大部分は美しく動作するように見える、それは最初の呼び出しではなく、次は、再び、そして、一度おきにしか動作しません。MySQLストアドプロシージャは.Net経由で他のすべての呼び出しを処理します

毎回procを呼び出すためにworkbenchを使用すると、VS2010でDBに接続する場合と同じように、失敗するのはアプリケーションコードだけです。私は、毎回接続が開かれ、閉じられている(そして処分されている)ことをかなり明示していますが、運がないとはっきりしています。

サンプルクエリです。これは私が一番使っているprocです:

SELECT 
     U.id, 
     U.First_Name, 
     U.Last_Name, 
     U.Birth_Date, 
     U.Created, 
     U.Password 
    FROM 
     test.user U; 

ご覧のとおり、それは信じられないほど簡単です。しかし、そのprocだけではありません。私は任意の順序で任意のprocsを呼び出して、同じ結果を得ることができます。私がprocを使用しないコードでクエリを呼び出すと、それはうまく動作しますが、会社が使用するモデルはデータベース(MSSQL)への呼び出しごとにprocsであり、持ち歩きたいものですこのアプリケーションと同じ基準でも同様です。ただ、ここでは、徹底すべき

は、接続文字列(もちろん変更された値)である:

Server=127.0.0.1;Port=3306;Data Source=localhost;Database=testdb;User Id=test_user;Password=pword; 

そして次は、データベース・マネージャーの一番上にある:

​​

私が実行しています"using"ブロックを持つコネクション、コマンド、データアダプタを実行した後、それらが適切に処分されていることを確認し、安全のためだけに処分を宣言することさえ試みました。行動を変えるものはありません。

誰もこれまで見たことがありますか?問題が発生した場合は、すべてがローカルで実行されています。ここで

は、呼び出しを行うコードである、と私はそれを自分で解決していることがあります。

のpublic staticのDataTable SPExecuteTable(文字列CommandTextを= ""、リストパラス= null)を { のDataTable dtを=新しいのDataTableを( ); 例外ex = null;

using (MySqlConnection conn = new MySqlConnection(MySQL_Connection)) 
    { 
     using (MySqlCommand com = MySQlComnd(commandText, paras)) 
     { 
      try 
      { 
       conn.Open(); 
       com.Connection = conn; 

       using (MySqlDataAdapter oda = new MySqlDataAdapter()) 
       { 
        oda.SelectCommand = com; 
        oda.Fill(dt); 

       } 
      } 
      catch (Exception e) 
      { 
       ex = e; 
      } 
      finally 
      { 
       conn.Close(); 
      } 
     } 
    } 

    if (ex != null) 
     throw ex; 

    return dt; 
} 
+2

あなたの実際の呼び出しコードを表示してください... –

答えて

1

私は一種の溶液に、ダム-lucked:

public static DataTable SPExecuteTable(string commandText = "", List<object> paras = null) 
    { 
     DataSet ds = new DataSet(); 
     DataTable dt = new DataTable(); 
     Exception ex = null; 

      using (MySqlCommand com = MySQlComnd(commandText, paras)) 
      { 
       try 
       { 
        com.Connection.Open(); 

        using (MySqlDataAdapter oda = new MySqlDataAdapter()) 
        { 
         oda.SelectCommand = com; 
         oda.Fill(ds); 
         dt = ds.Tables[0]; 
        } 
       } 
       catch (Exception e) 
       { 
        ex = e; 
       } 
       finally 
       { 
        com.Connection.Close(); 
        com.Connection.Dispose(); 
       } 
      } 


     if (ex != null) 
      throw ex; 

     return dt; 
    } 

あなたはDataSetを埋めるかどうかを確認してからちょうど最初の表をつかむことができるように、それは動作します。私は、MySQLデータアダプタがテーブルだけを満たす根本的な問題があると仮定していますが、DataSetはその問題を共有していないようです。

+0

あなたは私に多くの欲求不満を救ってくれました。なぜデータベースへの呼び出しが何も返されなかったか、または機能___がデータベース_____ "_に存在しません。 MySQLのデータアダプタは、データセットにデータを取り込むのではなく、テーブルにデータを書き込むときにすべてが乱れてしまいます。私の場合は自動生成されたデータセットコードを使用しているので、Fill()メソッドをオーバーロードしてテーブルの代わりにデータセットを埋めなければなりませんでした。今働いているようです! – Aaronster

関連する問題