刚开始学习ASP.NET 基础还非常不扎实 照着 ASP.NET3.5网站开发实例教程 这本书的代码做
模仿最后一章实例开发的时候 出现了这样的问题 (用的是VS2010)1)在article.aspx.cs页面调试时,总是提示 未将对象引用设置到对象的实例,不能运行,但每次更改数据库后可以运行一次
2)在主页调试时,运行没有问题 似乎是出问题的语句,但不懂。。请问是怎么回事谢谢!
string strsql = "select  * from article where articletype like '" + Request.Params["id"].ToString() + "'order by articleid desc";article.aspx.cs的代码using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GROUP.Manage;public partial class article1 : System.Web.UI.Page
{
    BaseClass BaseClass1 = new BaseClass();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack) getGoods();    }
    private void getGoods()
    {
        //获取数据
        string strsql = "select  * from article where articletype like '" + Request.Params["id"].ToString() + "'order by articleid desc";
        DataTable dt = BaseClass1.ReadTable(strsql);
        //实现分页
        PagedDataSource objPds = new PagedDataSource();
        objPds.DataSource = dt.DefaultView;
        objPds.AllowPaging = true;
        objPds.PageSize = 12;
        int CurPage = Convert.ToInt32(this.LabelPage.Text);
        objPds.CurrentPageIndex = CurPage - 1;
        if (objPds.CurrentPageIndex < 0)
        {
            objPds.CurrentPageIndex = 0;
        }        //只有一页时禁用上页、下页按钮
        if (objPds.PageCount == 1)
        {
            LinkButtonPrev.Enabled = false;
            LinkButtonNext.Enabled = false;
        }
        else//多页时
        {
            //为第一页时
            if (CurPage == 1)
            {
                LinkButtonPrev.Enabled = false;
                LinkButtonNext.Enabled = true;
            }
            //是最后一页时
            if (CurPage == objPds.PageCount)
            {
                LinkButtonPrev.Enabled = true;
                LinkButtonNext.Enabled = false;
            }
        }        this.LabelTotalPage.Text = Convert.ToString(objPds.PageCount);
        GridView1.DataSource = objPds;
        GridView1.DataBind();    }
    //首页
    protected void LinkButtonFirst_Click(object sender, EventArgs e)
    {
        this.LabelPage.Text = "1";
        getGoods();
    }
    //上一页
    protected void LinkButtonPrev_Click(object sender, EventArgs e)
    {
        this.LabelPage.Text = Convert.ToString(int.Parse(this.LabelPage.Text) - 1);
        getGoods();
    }
    //下一页
    protected void LinkButtonNext_Click(object sender, EventArgs e)
    {
        this.LabelPage.Text = Convert.ToString(int.Parse(this.LabelPage.Text) + 1); ;
        getGoods();
    }
    //末页
    protected void LinkButtonLast_Click(object sender, EventArgs e)
    {
        this.LabelPage.Text = this.LabelTotalPage.Text;
        getGoods();
    }
}操作数据库的公共类
using System;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;namespace GROUP.Manage
{
/// <summary>
/// BaseClass 的摘要说明。
/// </summary>
public class BaseClass: System.Web.UI.Page
{
        String strConn;
        public BaseClass()
{
            strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            
} //读写数据表--DataTable
public DataTable ReadTable(String strSql)
{
DataTable dt=new DataTable();//创建一个数据表dt
            SqlConnection Conn = new SqlConnection(strConn);//定义新的数据连接控件并初始化
            Conn.Open();//打开连接
            SqlDataAdapter Cmd = new SqlDataAdapter(strSql, Conn);//定义并初始化数据适配器
            Cmd.Fill(dt); //将数据适配器中的数据填充到数据集dt中
Conn.Close();//关闭连接
return dt;
} //读写数据集--DataSet
        public DataSet ReadDataSet(String strSql)
{
DataSet ds=new DataSet();//创建一个数据集ds
            SqlConnection Conn = new SqlConnection(strConn);//定义新的数据连接控件并初始化
            Conn.Open();//打开连接
            SqlDataAdapter Cmd = new SqlDataAdapter(strSql, Conn);//定义并初始化数据适配器
            Cmd.Fill(ds); //将数据适配器中的数据填充到数据集ds中
Conn.Close();//关闭连接
return ds;
}        public DataSet GetDataSet(String strSql, String tableName)
{
            DataSet ds = new DataSet();//创建一个数据集ds
            SqlConnection Conn = new SqlConnection(strConn);//定义新的数据连接控件并初始化
            Conn.Open();//打开连接
            SqlDataAdapter Cmd = new SqlDataAdapter(strSql, Conn);//定义并初始化数据适配器
            Cmd.Fill(ds, tableName); //将数据适配器中的数据填充到数据集ds中
            Conn.Close();//关闭连接
            return ds; }        public SqlDataReader readrow(String sql)
{            SqlConnection Conn = new SqlConnection(strConn);
            Conn.Open();            SqlCommand Comm = new SqlCommand(sql, Conn);
            SqlDataReader Reader = Comm.ExecuteReader();
            if (Reader.Read())
{
                Comm.Dispose();
                return Reader;
}
else 
{
                Comm.Dispose();
return null;
} } //读某一行中某一字段的值
        public string Readstr(String strSql, int flag)
{
DataSet ds=new DataSet();//创建一个数据集ds
            String str;            SqlConnection Conn = new SqlConnection(strConn);//定义新的数据连接控件并初始化            Conn.Open();//打开连接            SqlDataAdapter Cmd = new SqlDataAdapter(strSql, Conn);//定义并初始化数据适配器
            Cmd.Fill(ds); //将数据适配器中的数据填充到数据集ds中 str=ds.Tables[0].Rows[0].ItemArray[flag].ToString();
Conn.Close();//关闭连接
return str;
}
        public void execsql(String strSql)
{
            SqlConnection Conn = new SqlConnection(strConn);//定义新的数据连接控件并初始化            SqlCommand Comm = new SqlCommand(strSql, Conn);
            
            Conn.Open();//打开连接 Comm.ExecuteNonQuery();//执行命令
Conn.Close();//关闭连接 } }
}

解决方案 »

  1.   

    没看完,但是告诉你 未将对象引用设置到对象的实例 就是空指针的意思,一步一步debug,肯定有值是null
      

  2.   

    你打个断点, 自己跟踪一下吧。断点靠前面一点, 每次按f11只走一下就是。应该是某个变量为null, 但你又对这个为null的变量进行了一些操作。 很可能是dt
      

  3.   

    string strsql = "select  * from article where articletype like '" + Request.Params["id"].ToString() + "'order b......
    把红色的ToString()去掉,可能是Params["id"]为null了。
      

  4.   

    +1
    最好先判断下Params["id"],然后再对其进行转换。Request.Params["id"]==null? Request["id"]:Request.Params["id"].toString()
      

  5.   

    一般这个出错都是没有查到记录 你看看你的like语句有没有写对 我记得好像是 字段 like %
      

  6.   

    先判断Request.Params["id"]是不是null 
      

  7.   

    第一,监视Request.Params["id"].ToString()第二,监视strsql 变量,将值拿出来直接在sql里面查看第三,把你本地的sql打开,查看里面的sql语句进入情况.
      

  8.   

    没看完,但有一点,如果页面进行刷新了,关于DataTable相关的必须要重新生成一次。
      

  9.   

     这个地方你保证有值吗?Request.Params["id"]
      

  10.   

      判断  Request.Params["id"]     一下。