2013-09-30 63 views
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"]); 
+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/

+0

或者也許不要使用數據集來返回標量值 –

+0

的確如此。對於結果集是第一個表中的第一列的任何情況,ExecuteScalar都可以正常工作。 –

+0

加1指出SQL注入漏洞 –