当前位置:编程学习 > C#/ASP.NET >>

关于 未将对象引用设置到对象的实例 的问题

刚开始学习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();//关闭连接

}

}
}

--------------------编程问答-------------------- 没看完,但是告诉你 未将对象引用设置到对象的实例 就是空指针的意思,一步一步debug,肯定有值是null --------------------编程问答-------------------- 你打个断点, 自己跟踪一下吧。断点靠前面一点, 每次按f11只走一下就是。

应该是某个变量为null, 但你又对这个为null的变量进行了一些操作。 

很可能是dt --------------------编程问答-------------------- 未将对象引用设置到对象的实例,找到出错的这行代码,肯定是这行引用了空的对象 --------------------编程问答-------------------- string strsql = "select  * from article where articletype like '" + Request.Params["id"].ToString() + "'order b......
把红色的ToString()去掉,可能是Params["id"]为null了。 --------------------编程问答--------------------
引用 4 楼 dalmeeme 的回复:
string strsql = "select  * from article where articletype like '" + Request.Params["id"].ToString() + "'order b......
把红色的ToString()去掉,可能是Params["id"]为null了。

+1
最好先判断下Params["id"],然后再对其进行转换。Request.Params["id"]==null? Request["id"]:Request.Params["id"].toString() --------------------编程问答-------------------- 一般这个出错都是没有查到记录 你看看你的like语句有没有写对 我记得好像是 字段 like % --------------------编程问答-------------------- 菜鸟十分受教育 --------------------编程问答--------------------
引用 5 楼 patric05034 的回复:
引用 4 楼 dalmeeme 的回复:
string strsql = "select  * from article where articletype like '" + Request.Params["id"].ToString() + "'order b......
把红色的ToString()去掉,可能是Params["id"]为null了。
+1
最好先判断下Params["……


--------------------编程问答-------------------- 先判断Request.Params["id"]是不是null  --------------------编程问答--------------------
引用 5 楼 patric05034 的回复:
引用 4 楼 dalmeeme 的回复:string strsql = "select  * from article where articletype like '" + Request.Params["id"].ToString() + "'order b......
把红色的ToString()去掉,可能是Params["id"]为null了。
+1
最好先……


+1 --------------------编程问答-------------------- 第一,监视Request.Params["id"].ToString()

第二,监视strsql 变量,将值拿出来直接在sql里面查看

第三,把你本地的sql打开,查看里面的sql语句进入情况. --------------------编程问答-------------------- 良好的编程习惯哈,然后出错了习惯断点调试。这类错误最好解决了 --------------------编程问答-------------------- 没看完,但有一点,如果页面进行刷新了,关于DataTable相关的必须要重新生成一次。 --------------------编程问答--------------------  这个地方你保证有值吗?Request.Params["id"] --------------------编程问答--------------------   判断  Request.Params["id"]     一下。  
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,