谁能帮个忙啊。我的代码总是提示 “System.NullReferenceException: 未将对象引用设置到对象的实例”

Loken 2008-04-27 05:49:55
代码片段如下:

namespace OnlineExam2.DataAccessLayer
{
....

// 数据库接口类
public class DataBase
{


// 函数:
public DataSet GetDataSet(string ProcName, SqlParameter[] Params)
{
//Open();
SqlCommand Cmd = CreateCommand(ProcName, Params);
SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}
   }
}

namespace OnlineExam2.BusinessLogicLayer
{
//用户类
public class Paper
{
     public DataSet QueryPaper()
{
DataBase DB = new DataBase();
SqlParameter[] Params = new SqlParameter[1];
Params[0] = DB.MakeInParam("@PaperState", SqlDbType.Bit,1, "true"); //题目编号
return DB.GetDataSet("Proc_PaperUseList",Params);
}
   }
}

调用:
Paper paper = new Paper(); //创建Paper对象
DataSet ds = paper.QueryPaper(); //查询所有可用试卷

try
{
if (ds != null && ds.Tables[0].Rows.Count >= 1)
{
ddlPaper1.DataSource = ds.Tables[0].DefaultView; //指名考试科目列表框数据源
ddlPaper1.DataTextField = "PaperName"; //DataTextField显示Name字段值
ddlPaper1.DataValueField = "PaperID"; //DataValueField显示ID字段值
ddlPaper1.DataBind(); //绑定数据
}
else
{
ddlPaper1.Enabled = false;
imgBtnLogin1.Enabled = false;
lblMessage1.Text = "没有试卷!";
}
}
catch (NullReferenceException e)
{
Response.Write(e.Message + ds.Tables[0].Rows.Count.ToString());
}

总是显示 
System.NullReferenceException: 未将对象引用设置到对象的实例

谁有时间帮我可以留言,我将所有代码发过去看看。
...全文
182 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
syeerzy 2008-04-27
  • 打赏
  • 举报
回复
楼主和楼上整群人都是喜欢写代码不喜欢调试的人........





先学会调试,再学写程序. 哪里错设个断点看看,一切就都明白了,猜来猜去只是浪费时间,这种问题,设个断点,熟练的一分钟内搞定,不熟练的也不超过5分钟...就能发现ds.Tables.Count = 0 这样的问题了,自然就知道异常在什么地方...
ganguozai 2008-04-27
  • 打赏
  • 举报
回复
请楼主仔细观察“System.NullReferenceException: 未将对象引用设置到对象的实例”出错行号,这样就可迅速进行定位错误。并且一般情况下,造成此错误是由于引用类型的对象未创建(即未关联一段堆存储区)就访问其公有成员。
fcxxfcxx 2008-04-27
  • 打赏
  • 举报
回复
zc
datahandler2 2008-04-27
  • 打赏
  • 举报
回复
提几个疑问:
Params[0] = DB.MakeInParam("@PaperState", SqlDbType.Bit,1, "true"); //题目编号
SqlDbType.Bit类型传递的应该是True或False.怎么是字符串类型。
    try
{
你用在这个地方有具体意义吗?在数据操作基本完成到外层,要进行绑定的时候,你才来判断数据库方面的操作结果会不会导致外层异常好像有点不大好。
出现你那个异常我估计有两个情况:
第一个 ds.Tables[0].DefaultView; 无数据源---但概率很低
ddlPaper1.DataTextField = "PaperName";  〕
ddlPaper1.DataValueField = "PaperID";
第二种。你要绑定到这个控件指定的文本字段和值字段,在你的存储过程中忘了做为查询字段。
汉升软件 2008-04-27
  • 打赏
  • 举报
回复
我也遇到同樣的問題,關注ing...
hackztx 2008-04-27
  • 打赏
  • 举报
回复
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.selectcommand=cmd;
手写的,没有注意大小写

CreateCommand这个函数的代码是怎么写的?
Loken 2008-04-27
  • 打赏
  • 举报
回复
 不是空值,我看过 
changjiangzhibin 2008-04-27
  • 打赏
  • 举报
回复
可能绑定的数据源是空的,设断点在报错的那一行,快速查看(quickwatch)ds的值
ssy888 2008-04-27
  • 打赏
  • 举报
回复
在数据层getDataSet返回的是dataset,你可以试试新建个方法或者干脆把这个修改返回值为DataTable: return dataset.table[0]. 当然逻辑层也改为返回DataTable。
页面绑定的时候直接建DataTable对象,然后绑到你的控件上试试。随口说说,尽可一试。

这种空引用error其实也经常碰到,有时候是很难找出来,光看代码看不出啥,唯一办法在逻辑层断开测试数据层返回的东西对不对,然后在页面测试逻辑层的东西,只有这样一步步慢慢找到底哪错了。

Loken 2008-04-27
  • 打赏
  • 举报
回复
ddlPaper1.DataSource = ds.Tables[0].DefaultView; //指名考试科目列表框数据源
这句报错,怎么解决?

ddlPaper1.DataSource = ds 这样也是错
Loken 2008-04-27
  • 打赏
  • 举报
回复
怎么解决?
Nobel0429 2008-04-27
  • 打赏
  • 举报
回复
空引用

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧