ASP抛出MySQL异常的解决方法

时间:2011-10-13 02:53:32

标签: c# asp.net mysql exception error-handling

这将需要一些解释。我是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)

我正在寻找的是一种返回虚假IF的方法,并且只有在查询尝试获取不存在的结果时才会这样。问题是,在我的实现中,它会抛出错误/异常。我需要这个在运行时“优雅地失败”,可以这么说。我应该提到的一件事是,使用此实现,应用程序会在分配布尔“hasRows”时立即抛出错误。为什么会这样,我不知道。

那么,有什么想法吗?

3 个答案:

答案 0 :(得分:0)

你需要用try子句

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

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

答案 1 :(得分:0)

很难说是肯定的,因为你没有发布它正在抛出的确切异常,但我怀疑问题是你在已经使用的命令上调用ExecuteReader。正如documentation所说:

  

在使用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和计数等来计算什么,但这应该让你指向正确的方向。

答案 2 :(得分:0)

首先尝试抓住

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

错误的可能原因是你的mysql查询中有错误。 尝试直接在您的mysql查询浏览器中执行您的查询,您将得到答案。 如果它工作正常,那么仔细检查你的连接字符串是否正确。

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