【问题标题】:MySql.Data.dll but was not handled in user codeMySql.Data.dll 但未在用户代码中处理
【发布时间】:2017-03-13 14:20:28
【问题描述】:

当我将我的 asp.net Web 表单应用程序连接到本地主机上的 mysql 数据库时,我是 C# 中的新程序员

我收到此错误:

MySql.Data.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

为什么我需要帮助

我在堆栈上找到了一些关于它的东西,但我不知道如何使用他们的具体解决方案。

关于我的代码

在我的代码中,我试图连接到 mysql 并调用简单的 sql 命令 有我的代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Newtonsoft;
using Newtonsoft.Json;
using System.Diagnostics;
using MySql.Data;
using MySql;
using MySql.Data.MySqlClient;

namespace WebApplication2

{
    public partial class WebForm1 : System.Web.UI.Page
    {
        MySqlConnection connection;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CheckMysqlConnection();
            }     
            UploadToMysqlDatabase();
            }

    private void CheckMysqlConnection() {

        //connection string

            string connectionString = @"Server=localhost;Database=ev3;Uid=root;Pwd=;";
            using (connection = new MySqlConnection(connectionString))
            {
            if(connection.State != System.Data.ConnectionState.Open)
            {
                    connection.Open();
                    Response.Write("Mysql Connection Succesful");
                }


            }


    }

    private void UploadToMysqlDatabase() {
        //Debug.WriteLine(objekt.portId);
        MySqlCommand cmd = new MySqlCommand("SELECT * FROM robot",connection);


        cmd.ExecuteNonQuery(); ***// there is error***

        //connection.Close();
    }
}

错误详情

System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=Connection must be valid and open.
  Source=MySql.Data
  StackTrace:
       v MySql.Data.MySqlClient.ExceptionInterceptor.Throw(Exception exception)
       v MySql.Data.MySqlClient.MySqlConnection.Throw(Exception ex)
       v MySql.Data.MySqlClient.MySqlCommand.CheckState()
       v MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
       v MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
       v WebApplication2.WebForm1.UploadToMysqlDatabase() v C:\Users\Jan\Dropbox\infs1\insys2\WebApplication2\WebApplication2\WebForm1.aspx.cs:řádek 78
       v WebApplication2.WebForm1.Page_Load(Object sender, EventArgs e) v C:\Users\Jan\Dropbox\infs1\insys2\WebApplication2\WebApplication2\WebForm1.aspx.cs:řádek 45
       v System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       v System.Web.UI.Control.OnLoad(EventArgs e)
       v System.Web.UI.Control.LoadRecursive()
       v System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

【问题讨论】:

  • 你的连接被释放了!
  • 这来自糟糕的连接处理。但无论如何,请在您的问题中添加实际的错误消息,包括所有相关消息和内部异常。
  • 我应该如何处理已处置的连接?
  • @Johny.M 什么都没有。发出命令时应该使用有效的连接。
  • MySql.Data.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理其他信息:连接必须有效且打开。

标签: c# mysql asp.net webforms


【解决方案1】:

当您的 connection.Open() 包含在 using (connection = new MySqlConnection(connectionString)) 语句中时,它会在完成后自动被释放(不再开放以供将来使用)。您正在尝试以完全独立的方法使用已处置的连接。您需要做的是调用private void UploadToMysqlDatabase() 方法并将连接作为参数传递(即private void UploadToMysqlDatabase(string conn),或者在您的UploadToMysqlDatabase() 方法中创建一个新的connection.Open()

【讨论】:

  • 连接最好不要从一个方法传递到另一个方法,因为这样很难确保它们被正确处理。理想情况下,如果您需要连接,请在需要的地方创建它,并用 using 语句包装。
  • 每天学习新东西 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2014-01-07
  • 2017-01-19
  • 1970-01-01
相关资源
最近更新 更多