请问:.net中使用带有output参数存储过程返回数据集,好像不能用dataset接收到?
一个存储过程既需要返回output参数,又需要返回select * 的一个数据集,那么该如何写才能实现呢?我在写的时候发现如果存储过程中有output参数和有select * 语句时时就无法正常取到值,而只是其中一样的话则可以成功赋值给变量或者dataset。
另外,如果一个存储过程中有多个select语句,那么返回来的是不是最后的select语句,还是全部都返回呢?如果全部返回,应该如何使用dataset接收?谢谢!!
问题点数:50、回复次数:10Top
1 楼xjspa(天涯)回复于 2005-08-04 20:19:33 得分 5
create proc p_test
@x int output
as
select @x=x from tb_x
select * from tb_y
SqlCommand cmd=new SqlCommand("p_temp");
SqlParameter para=new SqlParameter();
para.ParameterName="@x";
para.Direction=ParameterDirection.Output;
para.DbType=SqlDbType.Int;
cmd.Parameters.Add(para);
DataSet dst=new DataSet();
SqlDataAdapter adpt=new SqlDataAdapter(cmd,con);
adpt.Fill(dst);
//get output Paramerter value
string x=para.Value;Top
2 楼zhilunchen(他山居士)回复于 2005-08-04 21:08:57 得分 5
不用这样,存储可以返回多个结果集,调用取得返回dataset后,用dataset.Tables[0],dataset.Tables[1],...分别获取结果集。Top
3 楼Happy2046(雪山飞狐)回复于 2005-08-04 21:18:55 得分 5
xjspa(天涯) 说得对Top
4 楼ChengKing((.net: http://blog.csdn.net/ChengKing ))回复于 2005-08-04 21:36:14 得分 5
不是dataset接受到结果值,是定义的那个命令参数 变量.Value会接受到Top
5 楼gaofeng2000(高老师)回复于 2005-08-04 22:52:06 得分 5
zhilunchen(他山居士) 的回答应该是楼猪想要的Top
6 楼btut2004(养鱼炒股)回复于 2005-09-15 21:16:15 得分 5
table[x]或nextdatasetTop
7 楼toin((材娃))回复于 2005-09-15 21:27:11 得分 5
不用这样,存储可以返回多个结果集,调用取得返回dataset后,用dataset.Tables[0],dataset.Tables[1],...分别获取结果集。
正确啊!多少个都没有问题的
Top
8 楼aspczlover(你的骄傲...)回复于 2005-11-29 12:13:25 得分 5
一个存储过程既需要返回output参数,又需要返回select * 的一个数据集,那么该如何写才能实现呢?
=============================================================================
如果一个存储过程中有多个select语句
结果集可用dataset.Tables[0],dataset.Tables[1]获得
返回值和output参数的获取和上面不一样 可这样实现
SqlCommand sampleCMD = new SqlCommand("SampleProc", nwindConn);
sampleCMD.CommandType = CommandType.StoredProcedure;
SqlParameter sampParm = sampleCMD.Parameters.Add("RETURN_VALUE", SqlDbType.Int);
sampParm.Direction = ParameterDirection.ReturnValue;
sampParm = sampleCMD.Parameters.Add("@InputParm", SqlDbType.NVarChar, 12);
sampParm.Value = "Sample Value";
sampParm = sampleCMD.Parameters.Add("@OutputParm", SqlDbType.NVarChar, 28);
sampParm.Direction = ParameterDirection.Output;
nwindConn.Open();
SqlDataReader sampReader = sampleCMD.ExecuteReader();
Console.WriteLine("{0}, {1}", sampReader.GetName(0), sampReader.GetName(1));
while (sampReader.Read())
{
Console.WriteLine("{0}, {1}", sampReader.GetInt32(0), sampReader.GetString(1));
}
sampReader.Close();
nwindConn.Close();
Console.WriteLine(" @OutputParm: {0}", sampleCMD.Parameters["@OutputParm"].Value);
Console.WriteLine("RETURN_VALUE: {0}", sampleCMD.Parameters["RETURN_VALUE"].Value);
vb版也有 详情见 : http://www.7xm.net/info/14955.html
Top
9 楼xuwenzhuo(约定好了!我们会撑着那把油纸伞风雨同路、不分不离、吃到老玩到老。)回复于 2005-11-29 12:29:01 得分 5
废话!因为它是参数,所以最好用SqlDataParameterTop
10 楼singlepine(小山)回复于 2005-11-29 13:03:03 得分 5
http://singlepine.cnblogs.com/articles/281425.html
这里面有个完整的例子
public static DataSet GetList(int page_num,int row_in_page,string order_column,string comb_condition,ref int output)
{
string sql="tp_Fetch_List";
System.Data.SqlClient.SqlParameter[] p=new SqlParameter[5];
p[0]=new SqlParameter();
p[0].ParameterName ="@page_num";
p[0].Value =page_num;
p[0].DbType=System.Data.DbType.Int32;
p[1]=new SqlParameter();
p[1].ParameterName ="@row_in_page";
p[1].Value =row_in_page;
p[1].DbType=System.Data.DbType.Int32;
p[2]=new SqlParameter();
p[2].ParameterName ="@order_column";
p[2].Value =order_column;
p[2].DbType=System.Data.DbType.String;
p[3]=new SqlParameter();
p[3].ParameterName ="@row_total";
p[3].Direction=System.Data.ParameterDirection.Output;
p[3].DbType=System.Data.DbType.Int32;
p[4]=new SqlParameter();
p[4].ParameterName ="@comb_condition";
p[4].Value =comb_condition;
p[4].DbType=System.Data.DbType.String;
DataSet ds=ExecSPDataSet(sql,p);
if (p[3].Value!=DBNull.Value && p[3].Value.ToString()!=string.Empty )
output=Convert.ToInt32(p[3].Value);
return ds;
}
Top




