一行的例外情况

时间:2013-09-30 20:03:42

标签: c# wpf

我怎么能在这里找出一个问题。有一行导致异常。如果输入的部门是“DENTAL”,则该应用程序有例外:

“索引超出范围异常未被用户代码处理” 位置0没有行。

BHelper dbHelper = new DBHelper(); /<
                string sql = @"select distinct ID from OGEN.SCH_C_RESOURCES /<
                        where DESCRIPTION='" + deptName + "' AND FIRST_LEVEL_CAT = 'DEPT' and FACILITY_KEY  IN('" + StaticStuff.FacilityKey + "','BASE') order by 1"; /<
                DataSet ds = dbHelper.DataAdapter(CommandType.Text, sql); /<
                if (ds != null && ds.Tables.Count > 0)
                {
                    return Convert.ToInt32(ds.Tables[0].Rows[0]["ID"]);

1 个答案:

答案 0 :(得分:4)

您的代码未检查是否有任何行。但是,检查是否有表返回 - 我猜表是空的(不包含任何行),这是完全有效的。

if (ds != null && ds.Tables.Count > 0)

应该是

if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)

哦,你的代码对SQL注入攻击也是可以接受的。您应该使用参数化查询来防范这种情况。这是我前一段时间写过的一篇文章以及如何预防它:http://colinmackay.co.uk/2005/04/23/sql-injection-attacks-and-some-tips-on-how-to-prevent-them/