位置0处没有行错误处理

时间:2013-10-31 15:22:34

标签: c# asp.net arrays error-handling

我有以下代码:

try
{
    connection.Open();     

    da.Fill(ds);
    DataRow item = ds.Tables[0].Rows[0];
    byte[] item1 = (byte[])item["FileImage"];
    ds.Tables.Clear();
    numArray = item1;   
}
catch (Exception ex)
{
    throw ex;
}
finally
{
    connection.Close();
}
return numArray;
}

我的代码通过将一个ID从GridView传递到SQL语句来工作,以便找到与存储在表上的ID相关联的相应FileImage。我最近注意到,如果我手动输入一个不正确的ID,网站崩溃并抛出异常'位置0没有行'我发现基本上意味着没有数据要提取(显然是因为我输入了一个假ID)。 / p>

我的问题是如何处理此错误?我之前从未真正考虑过错误处理,但我想从我读过的内容中我会做一些if语句?基本上,如果没有异常则继续,但如果有异常,那么可能会将我页面上TextBox的文本更改为错误消息,告诉用户'警告! ID无效'?

感谢您的帮助!

6 个答案:

答案 0 :(得分:3)

你可能在这里得到错误:

DataRow item = ds.Tables[0].Rows[0];

因为此索引没有行,因此表中根本没有行。

您只需使用Count属性检查:

if(ds.Tables[0].Rows.Count > 0)
{

}

如果没有返回任何行,表也是空的。 Tables属性还具有Count属性。

if(ds.Tables.Count > 0)
{

}

答案 1 :(得分:1)

您需要在检索之前验证是否有数据。

替换:

DataRow item = ds.Tables[0].Rows[0];
byte[] item1 = (byte[])row["FileImage"];

byte[] item1 = null;
if (ds.Tables.Count > 0)
{
   var table = ds.Tables[0];
   if (table.Rows.Count > 0)
   { 
      var row = table.Rows[0];
      if (row.Columns.Contains("FileImage")) 
      {
         item1 = (byte[])row["FileImage"];
      }
   }
}
if (item1 == null) 
{
    //handle error
}

答案 2 :(得分:0)

您不必在catch块中抛出异常(从我在您发布的代码中看到的内容)。

你可以简单地显示一条消息,说明出现了这样的错误:

try
        {
            connection.Open();



            da.Fill(ds);
            DataRow item = ds.Tables[0].Rows[0];
            byte[] item1 = (byte[])item["FileImage"];
            ds.Tables.Clear();
            numArray = item1;


        }
        catch (Exception ex)
        {
            MessageBox.Show("My error description");
// or write the message to a textBox.
        }
        finally
        {
            connection.Close();
        }
        return numArray;
    }

答案 3 :(得分:0)

你可以做到

    try
    {
       // your code....           

    }
    catch (Exception ex)
    {
        MessageBox.Show("My method failed, see inner excpetion",ex);
    }
    finally
    {
        connection.Close();
    }
    return numArray;
}

答案 4 :(得分:0)

您需要查看.Rows是否包含元素。

if (ds.Tables[0].Rows.Any())
{
   // Has rows.
}

答案 5 :(得分:-1)

您应该检查是否有行可以使用。像这样:

try
    {
        connection.Open();



        da.Fill(ds);
        if (ds.Tables[0].Rows.Count > 0)
        {
           DataRow item = ds.Tables[0].Rows[0];
           byte[] item1 = (byte[])item["FileImage"];
           ds.Tables.Clear();
           numArray = item1;
        }

    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        connection.Close();
    }
    return numArray;
}