我有以下代码:
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无效'?
感谢您的帮助!
答案 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;
}