C# 该行/列不存在任何数据

C# 该行/列不存在任何数据,c#,asp.net,odbc,mdac,C#,Asp.net,Odbc,Mdac,在ASP.NET中使用C#执行以下代码时,我遇到了一个异常,如“行/列不存在数据” 我正在使用VisualStudio2008和MySQL。我正在使用MySql ODBC连接器5.1和MDAC2.8 请指导我如何解决此问题。Read方法返回一个布尔值,指示是否返回了任何行,因此您应该在访问读取器的结果之前始终测试此值 OdbcDataReader DR = cmd.ExecuteReader(); if (DR.Read() && DR.GetValue(0) != D

在ASP.NET中使用C#执行以下代码时,我遇到了一个异常,如“行/列不存在数据”

我正在使用VisualStudio2008和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();
编辑-- 你也应该考虑<代码>使用< /代码>连接,因为这将确保IIS被关闭(已部署),即使在使用语句中有异常发生。 您也可以去掉
if
语句,但这是一个品味问题

最后,标准的.NET习惯用法是将连接字符串保留在web.config的ConnectionString部分。下面没有显示这一点

   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;
   }

在经历了这么多的错误后,我发现了一些隐藏的东西:

我将连接对象声明为公共变量。然后我通过几个函数使用它,有一次我决定不重置它的连接字符串,因为它已经被前面的过程设置好了

随后的函数在通过公共连接对象设置的表进行循环时调用了前一个函数,因此在前一个函数返回其值后失去了连接,并关闭了其连接对象(这是两个函数共享的公共对象)


我希望这是有道理的。。。我花了几个小时才弄清楚到底发生了什么。

非常感谢,它工作得很好。我是Asp.net的新手,非常欢迎你。我添加了一个关于在编辑中使用的建议。请忽略它:)我明白你的意思,我会用它,非常感谢你的建议和帮助。
   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;
   }