2013-09-30 1 views
0

Comment puis-je résoudre un problème ici. il y a une ligne qui provoque une exception. si le ministère saisi est cette application 'DENTAIRE' a une exception:Exception pour une ligne

"Index Out of Range Exception est été non gérée par le code utilisateur" Il n'y a pas de ligne à la position 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

Que demandez-vous - comment gérer l'exception ou comment la corriger? –

Répondre

4

Votre code est ne vérifie pas s'il y a des lignes. Il vérifie, cependant, qu'il y a des tables retournées - et je suppose que la table est vide (ne contient pas de lignes) ce qui est parfaitement valide.

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

devrait probablement être

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

Oh, et votre code est également prédisposées à une attaque par injection SQL. Vous devriez probablement utiliser des requêtes paramétrées pour se prémunir contre cela. Voici un article que j'ai écrit tout à l'heure à ce sujet et comment l'éviter: http://colinmackay.co.uk/2005/04/23/sql-injection-attacks-and-some-tips-on-how-to-prevent-them/

+0

Ou peut-être ne pas utiliser un dataset pour renvoyer une valeur scalaire –

+0

En effet. 'ExecuteScalar' fonctionnerait correctement pour toute situation où le jeu de résultats est la première colonne, dans la première table. –

+0

Plus 1 pour souligner la vulnérabilité d'injection SQL –

Questions connexes