解决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",应用程序就会抛出一个错误。为什么会这样,我不知道。
有什么想法吗?
这很难说,因为您没有发布它抛出的确切异常,但我怀疑问题是您在已经使用的命令上调用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查询浏览器中执行你的查询,你会得到你的答案。如果它工作良好,然后再次检查您的连接字符串是否正确。
注:标记为答案,如果它解决了你的问题