如何解决行/列中没有数据
| 使用C#在ASP.NET中执行以下代码时,出现了类似“没有行/列的数据”的异常。OdbcConnection DbConnection = new OdbcConnection(ConfigurationManager.AppSettings[\"ConnectionStr\"]);
DbConnection.Close();
string cmdText = \"SELECT Team_ID FROM team_details WHERE Team_Code=?\";
OdbcCommand cmd = new OdbcCommand(cmdText,DbConnection);
cmd.Parameters.Add(\"?Code\",OdbcType.VarChar).Value = tbCode.Text;
DbConnection.Open();
OdbcDataReader DR = cmd.ExecuteReader();
DR.Read();
if (DR.GetValue(0) != DBNull.Value)
{
args.IsValid = false;
}
else
{
args.IsValid = true;
}
DbConnection.Close();
我正在使用Visual Studio 2008和MySQL。我正在使用MySql ODBC连接器5.1和MDAC2.8。
请指导我如何解决此问题。
解决方法
Read方法返回一个布尔值,指示是否返回任何行,因此,在访问读取器的结果之前,应始终测试此值。
OdbcDataReader DR = cmd.ExecuteReader();
if (DR.Read() && DR.GetValue(0) != DBNull.Value)
{
args.IsValid = false;
}
else
{
args.IsValid = true;
}
DbConnection.Close();
编辑----
您还应该考虑“ 2”个连接,因为即使在using语句中发生异常,这也将确保关闭(放置)。
您也可以摆脱if
陈述,但这是一个品味问题。
最后,标准.NET习惯用法是将连接字符串保留在web.config的ConnectionStrings部分中。下面未显示。
using(OdbcConnection DbConnection = new OdbcConnection(ConfigurationManager.AppSettings[\"ConnectionStr\"]))
{
string cmdText = \"SELECT Team_ID FROM team_details WHERE Team_Code=?\";
OdbcCommand cmd = new OdbcCommand(cmdText,DbConnection);
cmd.Parameters.Add(\"?Code\",OdbcType.VarChar).Value = tbCode.Text;
DbConnection.Open();
OdbcDataReader DR = cmd.ExecuteReader();
args.IsValid = DR.Read() && DR.GetValue(0) != DBNull.Value;
}
, 在经历了很多错误之后,我发现了一些隐藏的东西:
我将连接对象声明为公共变量。然后,我通过几个功能使用它,并且有一次我决定不重置它的连接字符串,因为它已由前面的过程设置。
随后的函数在循环访问由公共连接对象设置的表时调用了先前的函数,因此在先前的函数返回其值和CLOSED ITS CONNECTION OBJECT(这是两个函数共享的公共对象)后,失去了连接。 )!
我希望这是有道理的...花了我几个小时才能弄清楚发生了什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。