新手求助:返回类型为SqlDataReader的方法用作WebMethod时出现“未将对象引用设置到对象的实例”的错误?

lijinkkk 2006-05-03 04:04:31
代码如下:
[WebMethod()]
public SqlDataReader GetCategorys()
{
//定义数据库的Connection and Command
SqlConnection myConnection = new SqlConnection (SQLHelper.DBCONNECTIONSTRING);
SqlCommand myCommand = new SqlCommand("Pr_GetCategorys",myConnection);

//定义访问数据库的方式为存储过程
myCommand.CommandType = CommandType.StoredProcedure;

SqlDataReader dr = null;

try
{
//打开数据库的连接
myConnection.Open();
}
catch(Exception ex)
{
throw new MyException("10001","数据库连接失败!",ex);
}

try
{
//执行数据库的存储过程(访问数据库)
dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
catch(Exception ex)
{
throw new MyException("10001",ex.Message,ex);
}

//返回 dr
return dr;
...全文
241 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2006-05-04
  • 打赏
  • 举报
回复
webservice 无法返回datareader
duncansun 2006-05-04
  • 打赏
  • 举报
回复
对象没有实例化
lijinkkk 2006-05-04
  • 打赏
  • 举报
回复
谢谢了
真相重于对错 2006-05-04
  • 打赏
  • 举报
回复
lijinkkk 2006-05-04
  • 打赏
  • 举报
回复
这么说,用datareader是完全行不通,只有用dataSet了。是这样吗?
我用google搜到msdn里的一段话,是不是这个原因呢:

在 ADO.NET 的三个基本数据对象 — DataReader、DataTable 和 DataSet 中,只有 DataSet 可以与 Web 服务之间传递。这是因为,为了与 Web 服务进行通信,对象必须是可序列化的。(序列化是一个过程,它用于将对象的公共属性转换为 XML,并且因为 XML 只是纯文本,所以可以将其从一个应用程序传输到另一个应用程序,并且可以穿越防火墙,从而克服了 COM 的主要障碍之一。)DataReader 无法序列化,因为它们需要到服务器的开放连接。并且,因为 DataSet 处理 DataTable 的序列化以便进行封送处理,所以您也无法传递单个 DataTable。
真相重于对错 2006-05-04
  • 打赏
  • 举报
回复
return dataset
lijinkkk 2006-05-04
  • 打赏
  • 举报
回复
那有什么解决办法没有?小弟我急死了弄了一天了
lijinkkk 2006-05-03
  • 打赏
  • 举报
回复
再顶!没有好心人帮忙吗?
lijinkkk 2006-05-03
  • 打赏
  • 举报
回复
自己顶起

12,165

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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