2017-07-03 5 views
0

RESTful APIを使用してMySqlデータベースからデータを挿入および取得しようとしています。挿入クエリを実行すると、例外メッセージが表示されます。接続を有効にして開く必要があります。MySql例外:接続を有効にして開く必要があります。 C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using MySql.Data; 


using WorkAppApi.Models; 

namespace WorkAppApi 
{ 
public class DBConn 
{ 
    private MySql.Data.MySqlClient.MySqlConnection conn; 

    public DBConn() 
    { 
     string myconnstr; 
     myconnstr = "server=192.168.0.103;uid=root;pwd=ganga10lfc;database=readingmeterdb"; 
     try 
     { 
      conn = new MySql.Data.MySqlClient.MySqlConnection(); 
      conn.ConnectionString = myconnstr; 
      conn.Open(); 
     } 
     catch (MySql.Data.MySqlClient.MySqlException ex) 
     { 

     } 


    } 

    public long addMachine(machines machinetosave) 
    { 


     String sqlstr = "INSERT INTO machines (machineDesc) VALUES ('" + machinetosave.MachineDesc + "')"; 
     MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sqlstr,conn); 

     cmd.ExecuteNonQuery(); 

     long id = cmd.LastInsertedId; 
     return id; 
    } 


} 
} 

"メッセージ": "エラーが発生しました。"、 "ExceptionMessage": "接続が有効と開いている必要があります。"、 "ExceptionType": "System.InvalidOperationExceptionが"、 「のStackTrace ":" MySql.Data.MySqlClient.MySqlCommand.CheckState()で\ r \ n MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehaviorビヘイビア)\ r \ n MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()\ r \ n WorkAppApi.DBConn.addMachine(マシンmachinetosave)C:\ Users \ User \ Desktop \ WorkAppApi \ WorkAppApi \ DBConn.cs:WorkAppApi.Controllers.MachinesController.Post(machines値)の行41 \ r \ n C:\ Users \ User \ Desktop \ WorkAppApi \ WorkAppApi \ Controllers \ MachinesController .cs:行31 \ r \ nでlambda_method(Closure、Object、Object [])\ r \ n System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutorにあります。 012.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance、Object [] arguments)\\ \ n System.Webにある、> c__DisplayClassc.b__6 Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContextControllerContext、IDictionary`2引数、CancellationToken cancellationToken)\ r \ n ---例外がスローされた前の場所からのスタックトレースの終了--- System.Runtime.CompilerServicesでの\ r \ n .TaskAwaiter.ThrowForNonSuccess(タスクタスク)\ System \ Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクタスク)\ r \ n System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\ r \ n ---例外がスローされた前の場所からのスタックトレースの終了--- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスクタスク)での\ r \ n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificationでの\ r \ nタスクタスk)\ r \ n System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\ r \ n ---例外がスローされた前の場所からのスタックトレースの終了---システムで\ r \ n。 Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスクタスク)\ r \ n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクタスク)\ r \ n System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext() "

+0

ほとんどの場合、DBConn()で接続を開いているときに目に見えない例外があります。そこに例外を記録しておけば、後で失敗する理由が考えられます –

答えて

0

あなたはあなたがそれを必要とする場合にのみ、それを開く必要があります:サイドノートで

public long addMachine(machines machinetosave) 
{ 
string myconnstr = "server=192.168.0.103;uid=root;pwd=ganga10lfc;database=readingmeterdb"; 
    try 
    { 
     MySql.Data.MySqlClient.MySqlConnection() conn = new MySql.Data.MySqlClient.MySqlConnection(); 
     conn.ConnectionString = myconnstr; 
     conn.Open(); 

    String sqlstr = "INSERT INTO machines (machineDesc) VALUES ('" + machinetosave.MachineDesc + "')"; 
     MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sqlstr,conn); 

     cmd.ExecuteNonQuery(); 

     long id = cmd.LastInsertedId; 
     return id; 

    } 
    catch (MySql.Data.MySqlClient.MySqlException ex) 
    { 

    } 


} 

を、あなたは本当にオープンリソースのクリーンアップ/閉鎖を確実にするためにusing(){}ブロックでコーディングする必要があります。

関連する問題