0

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

“用户代码未处理索引超出范围异常”位置 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"]);
4

1 回答 1

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-防止他们/

于 2013-09-30T20:07:24.227 回答