我把if (reader.IsDBNull((int)reader[fieldName])) 换成if (Convert.IsDBNull(reader[fieldName]))也不行!????

解决方案 »

  1.   

    try
    {
       if (reader[fieldName]!=null || reader[fieldName].toString().Trim()!="")
       {
          return reader[fieldName].toString().Trim(); 
       }
       else
       {
          return "";
       }
    }
    catch(Exception ex)
    {
       //捕捉错误
    }
      

  2.   

    楼主还不清楚reader[fieldName]的意思啊!!!
      

  3.   

    “/”应用程序中的服务器错误。
    --------------------------------------------------------------------------------ID 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: ID源错误: 
    行 265:        public static int GetIntFieldValue(SqlDataReader reader, string fieldName, int replaceValue)
    行 266:        {
    行 267:            if (Convert.IsDBNull(reader[fieldName]))
    行 268:                return replaceValue;
    行 269:            return (int)reader[fieldName];
     源文件: E:\WEB\DataAccess\SqlHelper.cs    行: 267 堆栈跟踪: 
    [IndexOutOfRangeException: ID]
       System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +1433771
       System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +102
       System.Data.SqlClient.SqlDataReader.get_Item(String name) +12
       Dzsw.DataAccess.SqlHelper.GetIntFieldValue(SqlDataReader reader, String fieldName, Int32 replaceValue) in E:\WEB\DataAccess\SqlHelper.cs:267
       Dzsw.DataAccess.SqlHelper.GetIntFieldValue(SqlDataReader reader, String fieldName) in E:\WEB\DataAccess\SqlHelper.cs:281
       Dzsw.DataAccess.AirDisData.CreateFromDataReader(SqlDataReader reader) in E:\WEB\DataAccess\AirDisData.cs:89
       Dzsw.DataAccess.AirDisData.GetSpecialsPrice(DateTime rq, String myPage) in E:\WEB\DataAccess\AirDisData.cs:53
       Dzsw.BusinessObjects.AirDis.GetSpecialsPrice(DateTime rq, String myPage) in E:\WEB\BusinessObjects\AirDis.cs:214
       Dzsw.SeDo.ESelect.Page_Load(Object sender, EventArgs e) in E:\WEB\SeDo\ESelect.aspx.cs:26
       System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13
       System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +43
       System.Web.UI.Control.OnLoad(EventArgs e) +98
       Dzsw.Components.BasePage.OnLoad(EventArgs e) in E:\WEB\Components\BasePage.cs:193
       System.Web.UI.Control.LoadRecursive() +71
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4300 
    --------------------------------------------------------------------------------
    版本信息: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433 
      

  4.   

    看看数据库中有"ID"这个字段没,在看看,select 语句中有没有"ID"。这段代码应该没问题的。
      

  5.   

    没有ID这个Field, 建议打开SQL Server profiler, 看看出错的SQL script就清楚了.
      

  6.   

    如果reader里没有数据时,你用reader[field]会抛索引越界异常。
    所以必须判断reader里是否有数据,一般用法是:while(reader.Read())
    {...}另外,SqlDataReader读取数据时独占SqlConnection,LZ用它每次就读一列出来非常低效,
    而且SqlDataReader最好显示调用Close()方法,否则也可能报错。
      

  7.   

    datareder是只进只读的!
    读小数据的时候是很快的!
    如果操作数据库只想返回一个值,用输出参数就行了。没必要用datareder的!~
      

  8.   

    LZ在SQLHelper里设计这样的方法,
    目的估计是想让数据库返回统一的类型,
    而不用每次去判断是不是Null还是String.Empty.
    其实每次去判断一下也没什么大不了的,
    string类提供的IsNullOrEmpty方法大概就是为了方便大家判断。
    并且Null值和空值含义不一样,在有些业务逻辑可能需要加以区分,
    如果在DAL层将两者混为一团,在BLL层将无法判断。
    所以,所以,
    这类方法不用也罢……
      

  9.   

    try 

      if (reader[fieldName]!=null && reader[fieldName].toString().Trim()!=""&&reader[fieldName]!=DBNull.value) 
      { 
          return reader[fieldName].toString().Trim(); 
      } 
      else 
      { 
          return ""; 
      } 

    catch(Exception ex) 

      //捕捉错误 
      

  10.   


    到底怎么写代码才能捕捉错误?这里又不能response.write?