【问题标题】:No data exists for the row/column行/列不存在数据
【发布时间】:2011-09-22 12:47:14
【问题描述】:

在使用 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。

请指导我如何解决这个问题。

【问题讨论】:

    标签: c# asp.net odbc mdac


    【解决方案1】:

    Read 方法返回一个布尔值,指示是否返回了任何行,因此您应该始终在访问读取器的结果之前测试此值。

      OdbcDataReader DR = cmd.ExecuteReader();
    
    
    
    if (DR.Read() && DR.GetValue(0) != DBNull.Value)    
     {   
        args.IsValid = false; 
     } 
     else 
     {   
         args.IsValid = true; 
     } 
     DbConnection.Close();
    

    编辑---- 您还应该考虑using 连接,因为这将确保即使在 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;
       }
    

    【讨论】:

    • 非常感谢,一切正常。我是 Asp.net 的新人。
    • 不客气。我添加了关于在编辑中使用的建议。随意忽略它:)
    • 我明白你的意思,我会使用它,非常感谢你的建议和帮助。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多