解决ASP抛出MySQL异常的方法

本文关键字:方法 异常 MySQL ASP 抛出 解决 | 更新日期: 2023-09-27 18:11:18

这需要一些解释。我是ASP的新手,来自PHP。完全不同的世界。使用MySql Connecter/Net库,我决定制作一个数据库包装器,其中有相当数量的获取方法,其中一个是"FetchColumn()"方法,它简单地将字符串作为其参数并使用以下实现:

public object FetchColumn(string query)
        {
            object result = 0;
            MySqlCommand cmd = new MySqlCommand(query, this.connection);
            bool hasRows = cmd.ExecuteReader().HasRows;
            if (!hasRows)
            {
                return false;
            }
            MySqlDataReader reader = cmd.ExecuteReader();
            int count = 0;
            while(reader.HasRows)
            {
                result = reader.GetValue(count);
                count++;
            }
            return result;
        }�          return result;
        }public object FetchColumn(string query)

我要找的是一种方法来返回false如果,只有当查询试图获取不存在的结果。问题是,在我的实现中,它抛出了一个错误/异常。可以说,我需要它在运行时"优雅地失败"。我应该提到的一件事是,在这个实现中,一旦分配了布尔值"hasRows",应用程序就会抛出一个错误。为什么会这样,我不知道。

有什么想法吗?

解决ASP抛出MySQL异常的方法

这很难说,因为您没有发布它抛出的确切异常,但我怀疑问题是您在已经使用的命令上调用ExecuteReader。如文档所述:

当MySqlDataReader正在使用时,关联的MySqlConnection正忙于服务MySqlDataReader。在这种状态下,除了关闭MySqlConnection之外,不能对它执行任何其他操作。这是在MySqlDataReader之前的情况。MySqlDataReader的Close方法被调用。

您调用cmd.ExecuteReader()来检查是否有行,然后您再次调用ExecuteReader()来从行中获取数据。这不仅不能工作,因为它违反了上面列出的条件,如果工作,它将是非常低效的,因为它需要两次访问数据库。

按照我所链接的文档中的示例,我想说你想要的是这样的:

public object FetchColumn(string query)
{
    MySqlCommand cmd = new MySqlCommand(query, this.connection);
    MySqlDataReader reader = cmd.ExecuteReader();
    try
    {
        bool gotValue = false;
        while (reader.Read())
        {
            // do whatever you're doing to return a value
            gotValue = true;
        }
        if (gotValue)
        {
            // here, return whatever value you computed
        }
        else
        {
            return false;
        }
    }
    finally
    {
        reader.Close();
    }
}

我不确定你想用HasRows和计数等来计算什么,但这应该能让你指向正确的方向。

你需要用try子句

包围抛出错误的代码
try { 
    //The error throwing Code 
} 
catch (exception e)
{
    //Error was encountered
    return false   
}

如果抛出错误代码抛出错误,则执行catch语句;如果没有抛出错误,则忽略catch语句

首先尝试捕获

try
        {
            //code
        }
        catch (Exception exp)
        {
            //show exp as message
        }

和你的错误可能的原因是,你的mysql查询有错误在它。尝试直接在mysql查询浏览器中执行你的查询,你会得到你的答案。如果它工作良好,然后再次检查您的连接字符串是否正确。

注:标记为答案,如果它解决了你的问题