急!!求教,请各位大虾帮帮忙

he251251251 2010-10-29 10:24:24
DAL层中 其中GetDataSet(string sqlstr)是我在SQLHelper类中写好的一个数据填充的方法。
Public Dataset GetModules()
{
string sqlstr="select * from tbmodule";
try
{
Dataset ds=SQLHelper.GetDataSet(sqlstr);//
if(ds.Table[0].Rows.Count>0)
{
return ds;
}
else
{
return null;
}
}
catch
{
return null;
}
}

然后我在BLL层中调用了DAL中这个方法
ModuleDAL moduledal=new ModuleDAL();
Public DataSet GetModules()
{
return modules.GetModules();
}

完了我在表现层用了一个datalist来显示我的数据表格
ModuleBLL modulebll=new ModuleBLL();
if(!IspostBack)
{
DatalistInfo.DataSource=modulebll.GetModules().Tables[0].DefaultView;
DatalistInfo.DataBlind();
}

出现的错误提示: 未将现象引用设置到对象实例

我调试了很久都不知道是什么原因,小弟刚刚学着用多层架构,麻烦大哥指点一二,新手没什么分,在这里先谢谢了!
...全文
229 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
he251251251 2010-10-29
  • 打赏
  • 举报
回复
先结贴,慢慢调试。。。
冰岛男孩 2010-10-29
  • 打赏
  • 举报
回复
恩,我用断点调试一下,谢谢各位了,谢谢
he251251251 2010-10-29
  • 打赏
  • 举报
回复
恩,我用断点调试一下,谢谢各位了,谢谢
boyldr 2010-10-29
  • 打赏
  • 举报
回复
table[0]为空,那可能是GetDataSet方法有问题(执行了catch,说明try块有问题),
你在19楼贴出的代码,把try...catch...去掉就知道原因了。
i_see_u 2010-10-29
  • 打赏
  • 举报
回复
设置几个断点,调试进去看看撒
进入调试后 按F10 单步执行 就能找到哪儿错了··
wwfgu00ing 2010-10-29
  • 打赏
  • 举报
回复
恩,断点调试一下
he251251251 2010-10-29
  • 打赏
  • 举报
回复
郁闷了。。。现在提示就是TABLE[0]为空了,我里面明明有值的。。
loveyan52112 2010-10-29
  • 打赏
  • 举报
回复
未将对想引用到对象实例,就说明传的值是空吗。。。这个还有什么啊。。。

设个断点看一下就能看见了,



肯定返回的是个NUll
boyldr 2010-10-29
  • 打赏
  • 举报
回复
本人有一个小小的建议,楼主在编写代码的时候,在开发阶段,尽量别在代码中加入try...catch...语句,这样有碍代码调试。一般情况,只有在代码完全正确后,再加try语句。
likf521 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zwodezuiai 的回复:]
感觉GetModules方法没必要去判断ds 直接返回SQLHelper.GetDataSet(sqlstr);就行了

绑定的话就这样
DatalistInfo.DataSource=modulebll.GetModules();
DatalistInfo.DataBind();
[/Quote]


这位仁兄不错··直接点,没值绑定了也为空··不会报错··
likf521 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 he251251251 的回复:]
我检查了很多遍了,连接跟填充都没有问题
我还单独测试了一下,为什么Tables[0]为空了??
[/Quote]

你没值时候就为空啊···
boyldr 2010-10-29
  • 打赏
  • 举报
回复
还有这里:DatalistInfo.DataSource=modulebll.GetModules().Tables[0].DefaultView;
你去掉“DefaultView”即为:DatalistInfo.DataSource=modulebll.GetModules().Tables[0]试下(我绑定代码的时候,从来不使用DefaultView的)。
boyldr 2010-10-29
  • 打赏
  • 举报
回复
以下的建议可能有助于你解决这个问题:
1、把try...catch...去掉再测试
2、查看一下变量ds的值,有可能是它null而执行了catch。
he251251251 2010-10-29
  • 打赏
  • 举报
回复
GetDataSet方法
Public static GetDataset(string sqlstr)
{
try
{
Mysqlconnection con=new Mysqlconnection("server=localhost;data source=bbsdb;user id=root;password=123")
con.open();
Mysqlcommand cmd=new mysqlcommand(sqlstr,con);
Dataset ds=new dataset();
MysqlDataAdapter dapt=new MysqlDataAdapter(cmd);
dapt.Fill(ds);
}
catch
{
return null;
}
finally
{
con.close();
}
}
he251251251 2010-10-29
  • 打赏
  • 举报
回复
我测试的时候,显示了内容。。
he251251251 2010-10-29
  • 打赏
  • 举报
回复
因为我连接时写在配置文件里,然后重新开了个测试网页,就是没有用架构,写在一起,代码几乎一样,测试时正常的。。。
不懂装懂 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 he251251251 的回复:]
连接和填充那2个方法我单独测试通过了的。。。
[/Quote]
....测试通过,不代表能运行,
Dataset ds=SQLHelper.GetDataSet(sqlstr);//
if(ds.Table[0].Rows.Count>0)//调试到这句,看上一句ds的值,如果为空,检查
1、GetDataSet方法
2、数据库是不是存在,有数据
打一壶酱油 2010-10-29
  • 打赏
  • 举报
回复
那就可能是下面的原因了:
1. 连接到了错误的服务器 如果是这样改一下连接 IP 地址

2. 连接到了错误的数据库 如果是这样 加一句sql use 要访问的数据库名

3. 你写错表名了
he251251251 2010-10-29
  • 打赏
  • 举报
回复
连接和填充那2个方法我单独测试通过了的。。。
zwodezuiai 2010-10-29
  • 打赏
  • 举报
回复
感觉GetModules方法没必要去判断ds 直接返回SQLHelper.GetDataSet(sqlstr);就行了

绑定的话就这样
DatalistInfo.DataSource=modulebll.GetModules();
DatalistInfo.DataBind();
加载更多回复(13)

62,047

社区成员

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

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

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

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