以下是出错页面的错误提示
未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 行 20:     {
行 21:         strSql = "select * from z_GoodsInfo order by Goods_addDate desc";
行 22:         dtTable = webService.ExcuteSelect(strSql);
行 23:         int i = 0;
行 24:         for (i = 0; i < dtTable.Rows.Count; i++)//获得第一个不是促销的最新书籍
                   {
            if (dtTable.Rows[i]["Goods_isSpecial"].ToString() == "n")
                break;
           }
           this.lblGoodsName.Text = dtTable.Rows[i]["Goods_name"].ToString();//显示书名源文件: e:\我的文档\Visual Studio 2005\bookshop\Default.aspx.cs    行: 22 堆栈跟踪: [NullReferenceException: 未将对象引用设置到对象的实例。]
   _Default.Page_Load(Object sender, EventArgs e) in e:\我的文档\Visual Studio 2005\bookshop\Default.aspx.cs:22
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +45
   System.Web.UI.Control.OnLoad(EventArgs e) +80
   System.Web.UI.Control.LoadRecursive() +49
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3745以下是webservice.cs的部分代码
  public DataTable ExcuteSelect(string strSql)
    {
        string strConn = "Data Source=(local);Initial Catalog=shop;Integrated Security=true";
        DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
        DbConnection dbConn = dbProviderFactory.CreateConnection();
        dbConn.ConnectionString = strConn;
        dbConn.Open();
        DbCommand dbComm = dbProviderFactory.CreateCommand();
        dbComm.Connection = dbConn;
        dbComm.CommandText = strSql;
        DbDataAdapter adapter = dbProviderFactory.CreateDataAdapter();
        adapter.SelectCommand = dbComm;
        DataSet dsDataSet = new DataSet();
        adapter.Fill(dsDataSet, "table");
        return dsDataSet.Tables["table"];
    } 

解决方案 »

  1.   

    只要这个语句没有返回值,就会造成你这样的异常
    所以要在这行的下面对你的dtTable 进行判断,是否为空,或者别的,判断完再使用
      

  2.   

    我觉得不是这个原因,就算没有返回表.这里是不会报错的.我觉得报错的是
    this.lblGoodsName.Text = dtTable.Rows[i]["Goods_name"].ToString();//显示书名 
    这一行.
    这时如果没有任何返回行的时候.就会报错了.
      

  3.   

    谢谢你的回复,我加了判断 
    if(webService.ExcuteSelect(strSql)!=null)
            dtTable = webService.ExcuteSelect(strSql);
    我改成这样也出现了同样的报错,请问该怎么办?
      

  4.   

    Thank you! 
    我所用到的这张表在数据库中已经有数据了,它返回行时应该会有东西的吧?可是还是不行.
    按照你的意思,我改怎么修改呢?
      

  5.   

    dtTable = webService.ExcuteSelect(strSql); 
    if(dtTable ==null || dtTable.Rows.Count==0)
    {
       Page.RegisterStartupScript(DateTime.Now.ToString(), "<script>alert('表为空 !')</script>");
    return;
    }
    else
    {
           int i = 0; 
          for (i = 0; i < dtTable.Rows.Count; i++)//获得第一个不是促销的最新书籍 
                      { 
                if (dtTable.Rows[i]["Goods_isSpecial"].ToString() == "n") 
                    break; 
              } 
              this.lblGoodsName.Text = dtTable.Rows[i]["Goods_name"].ToString();//显示书名 
    }