• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

10万火急,请求帮忙,返回dataset或datatable问题

zhuxiaojun2002 北京博雅 程序员  2005-03-21 05:00:53
public DataSet GetUserInfo(int id)
{
DataSet ds=new DataSet();
SqlParameter[] commandParameters=new SqlParameter[1];
commandParameters[0]=new SqlParameter("@id",id);
SqlHelper.FillDataset(CONN,CommandType.StoredProcedure,"sp_GetUserPartInfo",ds,new string[]{"UserInfo"},commandParameters);
return(ds);
}

使用存储过程,返回一个用户信息(ds)。但是其中有个t_id(用户类别),关联另外一个表。
我要返回的ds是,用户信息,还有类别名称,而不是id。

...全文
143 点赞 收藏 13
写回复
13 条回复
Overriding 2005年03月24日
CONN,CommandType.StoredProcedure,"sp_GetUserPartInfo",ds,new string[]{"UserInfo"},commandParameters);
====>
CONN,CommandType.StoredProcedure,"sp_GetUserPartInfo",ds,"UserInfo",commandParameters);

二者等价,就是给你要fill的表取个名字!
回复 点赞
daview 2005年03月24日
SqlHelper.FillDataset(CONN,CommandType.StoredProcedure,"sp_GetUserPartInfo",ds,new string[]{"UserInfo"},commandParameters);

没有使用过SQLHELPER,所以不清楚。从你的情况来分析,SQLHELPER的方法FILLDATASET的支持同时把数据FILL到多个表中,表名参数以字符串数组的形式存在参数4中。

回复 点赞
zhuxiaojun2002 2005年03月22日
谢谢大家,我试试,谢谢笨牛!这个问题一定要找你搞彻底。
看看这个SqlHelper.FillDataset(CONN,CommandType.StoredProcedure,"sp_GetUserPartInfo",ds,new string[]{"UserInfo"},commandParameters);

还问一下大家:
new string[]{"UserInfo"}这个是不是为ds填充一个名为UserInfo的表啊!
回复 点赞
daview 2005年03月22日
之所以用循环是为了保证数据的安全。即便你确定有且只有一条记录。

这样在异常(1条记录或多条记录)的时候保证的不会出现其它的异常。
回复 点赞
daview 2005年03月22日
就用一瓢的方法。

其实也没有必要构建一个新的表(如果原来的表不进行数据更新操作的话),只要在原有的表添加一个新的字段就行:

ds1.Tables[0].Columns.Add("t_name",typeof(string));
foreach(DataRow drTmp in ds1.Tables[0].Rows)
{
drTmp["t_name"] = GetUserName(drTmp["t_id"] as string);
}

这里的GetUserName就是你可以根据t_id获得t_name的函数。

我是笨牛。
回复 点赞
zhuxiaojun2002 2005年03月22日
to :bitsbird(一瓢 单身走我路),只有一条记录。没必要循环了。
我是已经得到了ds,ds中只有一个table,也只有一条记录。我想根据其中的ds1.Tables[0].Row[0]["t_id"]找到类别名称ds2.Tables[0].Rows[j]["t_name"]。然后构件一个新的table,其中也为一条记录,知识t_id转换成了t_name,然后return(newtable)
回复 点赞
haoco 2005年03月21日
up
回复 点赞
bitsbird 2005年03月21日
for(int i=0;i<ds1.Tables[0].Rows.Count;i++)
{
for(int j=0;j<ds2.Tables[0].Rows.Count;j++)
{
if(ds1.Tables[0].Row[i]["t_id"].ToString()==ds2.Tables[0].Rows[j]["t_id"].ToString())
{
ds1.Tables[0].Row[i]["t_id"]=ds2.Tables[0].Rows[j]["t_name"].ToString()
}
}
}
回复 点赞
zhuxiaojun2002 2005年03月21日
返回的是类别id,也就是t_id,我要用一个方法得到类别名称,然后返回ds为用户信息,类别名称(而不是t_id)!
回复 点赞
zhuxiaojun2002 2005年03月21日
呵呵,不能修改的,那样的话,我用存储过程操作视图就行了。这个类别名称要到别人的方法中得到的,
public DataSet GetUserInfo(int id)
{
DataSet ds=new DataSet();
SqlParameter[] commandParameters=new SqlParameter[1];
commandParameters[0]=new SqlParameter("@id",id);
SqlHelper.FillDataset(CONN,CommandType.StoredProcedure,"sp_GetUserPartInfo",ds,new string[]{"UserInfo"},commandParameters);
return(ds);
}
只能在这个里面加代码!
回复 点赞
KeNan_Net 2005年03月21日
这要看你的存储过程,返回的是什么了,
回复 点赞
hackate 2005年03月21日
那你就修改存储过程啊,你存储过程也帖出来嘛
回复 点赞
zhuxiaojun2002 2005年03月21日
救命啊!快疯了
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告