以下是出错页面的错误提示
未将对象引用设置到对象的实例。
说明: 执行当前 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"];
}
未将对象引用设置到对象的实例。
说明: 执行当前 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"];
}
所以要在这行的下面对你的dtTable 进行判断,是否为空,或者别的,判断完再使用
this.lblGoodsName.Text = dtTable.Rows[i]["Goods_name"].ToString();//显示书名
这一行.
这时如果没有任何返回行的时候.就会报错了.
if(webService.ExcuteSelect(strSql)!=null)
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();//显示书名
}