关于 未将对象引用设置到对象的实例 的问题
刚开始学习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了。 --------------------编程问答--------------------
+1
最好先判断下Params["id"],然后再对其进行转换。Request.Params["id"]==null? Request["id"]:Request.Params["id"].toString() --------------------编程问答-------------------- 一般这个出错都是没有查到记录 你看看你的like语句有没有写对 我记得好像是 字段 like % --------------------编程问答-------------------- 菜鸟十分受教育 --------------------编程问答--------------------
--------------------编程问答-------------------- 先判断Request.Params["id"]是不是null --------------------编程问答--------------------
+1 --------------------编程问答-------------------- 第一,监视Request.Params["id"].ToString()
第二,监视strsql 变量,将值拿出来直接在sql里面查看
第三,把你本地的sql打开,查看里面的sql语句进入情况. --------------------编程问答-------------------- 良好的编程习惯哈,然后出错了习惯断点调试。这类错误最好解决了 --------------------编程问答-------------------- 没看完,但有一点,如果页面进行刷新了,关于DataTable相关的必须要重新生成一次。 --------------------编程问答-------------------- 这个地方你保证有值吗?Request.Params["id"] --------------------编程问答-------------------- 判断 Request.Params["id"] 一下。
补充:.NET技术 , ASP.NET