这将需要一些解释。我是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”时立即抛出错误。为什么会这样,我不知道。
那么,有什么想法吗?
答案 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查询浏览器中执行您的查询,您将得到答案。 如果它工作正常,那么仔细检查你的连接字符串是否正确。
注意:如果它解决了您的问题,请标记为答案