2010-09-02 9 views
0

Я все еще в процессе обучения Asp.Net. У меня есть вопрос . Я использовал условие if, в котором я проверял значения набора данных. Это бросает мне исключение всякий раз, когда он проверяет условие, поскольку набор данных не имеет никакой ценности. Как преодолеть это. Код для этого здесь:Dataset in a If условие

DataSet ds = merchant.getIsactiveIsconfirmedforcancelaccount (merchantID);

if (_merchant.PackageID == (int)CommonHelper.Package.Free && _merchant.AccountStatus.Contains("Awaiting")) 
     { 
      spnMerchantActiveStatus.InnerHtml = ApplicationData.MSG_AWAITING_CONFIRMATION; 
     } 
     ***else if ((ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True" && (ds.Tables[0].Rows[0]["Active"]).ToString() == "N")*** 
     { 
      _merchant.AccountStatus = "Cancelled"; 
      spnMerchantActiveStatus.InnerHtml = _merchant.AccountStatus; 

     } 

     else if(_merchant.PackageID != (int)CommonHelper.Package.Free && ds1.Tables[0].Rows.Count == 0 && (ds2.Tables[0].Rows[0]["ConfirmationSrc"]).ToString() == "Admin") 
     { 
      _merchant.AccountStatus = "Free Trial"; 
      spnMerchantActiveStatus.InnerHtml = _merchant.AccountStatus; 
     } 
     else 
      spnMerchantActiveStatus.InnerHtml = _merchant.AccountStatus; 
    } 

Исключение составляет «Нет строки в позиции 0.»

+2

Если вы могли бы предоставить нам за исключением, это поможет нам устранить неполадки. Вы также должны проверить, чтобы ваш набор данных не был нулевым, прежде чем вы начнете работать с ним. – MunkiPhD

ответ

0

Похоже, что в ваших таблицах нет строк [0]. Вы можете добавить условие для проверки строки> 0, а затем продолжить с другими условиями в IF.

0

Вы предполагаете, что у вас есть строки в вашем DataSet.

Вместо

if ((ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True" && 
(ds.Tables[0].Rows[0]["Active"]).ToString() == "N") 

вы должны сделать что-то вроде

if ((ds.Tables[0].Rows.Count() > 0) && 
(ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True" && 
(ds.Tables[0].Rows[0]["Active"]).ToString() == "N") 

Но вам действительно нужно сделать более полную проверку ошибок, чем просто одно условие affectin вас прямо сейчас.

EDIT: Если это не очевидно, почему вышеупомянутые работы, читать на короткое замыкание логических операторов: http://msdn.microsoft.com/en-us/library/2a723cdk(VS.71).aspx

0

Попробуйте изменить еще заявление:

else if (
(ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True" && 
(ds.Tables[0].Rows[0]["Active"]).ToString() == "N") 
    { 
    _merchant.AccountStatus = "Cancelled"; spnMerchantActiveStatus.InnerHtml = _merchant.AccountStatus; 
    } 

Для

if ((null != ds.Tables[0]) && ((ds.Tables[0].Rows[0]["IsConfirmed"]).ToString() == "True") && ((ds.Tables[0].Rows[0]["Active"]).ToString() == "N")) 

Чтобы вы проверяли, что набор данных не равен null, прежде чем вы проверяете условия на нем.

или (как утверждают другие плакаты) убедитесь, что на самом деле у вас есть строки в наборе данных.

ds.Tables[0].Rows.Count() != 0 
+0

Это не сработает, если в DataTable нет строк: ds.Tables [0] .Rows [0] приведет к исключению нулевой ссылки. –

+0

Хорошая точка, вероятно, лучше всего проверить количество строк. – Dave