大家好,小弟菜鸟,从ASP转C#,还有太多的不明白,请各位高人指点一二~~~存储过程还没想好,就不贴出来了~~
我想要的效果是:存储过程会用 输出参数、return、select 这三种方式输出信息,而且SELECT 还不只一个。目的是判断执行是否成功,执行后的结果(数据列表),执行后的结果合计。举例来说,我往数据库中INSERT一条记录,如果INSERT成功,则返回一个SELECT查询结果,同时返回一个用SUM()合计过的SELECT查询结果。然后 RETURN 一个表示操作成功的值。由于某种约束,INSERT可能不成功,此时 return 一个值说明为何失败。同样也输出SELECT查询结果。存储过程大致是这样的:
select ...;
select ...;
return ...;我用的是VS 2005 和MsSql 2005。在网上找的结果似乎由于版本原因用不到。
请高人指点获取两个SELECT和一个 RETURN 的值,分不多,等我攒几天结帖时再加分。谢谢~~~!
我想要的效果是:存储过程会用 输出参数、return、select 这三种方式输出信息,而且SELECT 还不只一个。目的是判断执行是否成功,执行后的结果(数据列表),执行后的结果合计。举例来说,我往数据库中INSERT一条记录,如果INSERT成功,则返回一个SELECT查询结果,同时返回一个用SUM()合计过的SELECT查询结果。然后 RETURN 一个表示操作成功的值。由于某种约束,INSERT可能不成功,此时 return 一个值说明为何失败。同样也输出SELECT查询结果。存储过程大致是这样的:
select ...;
select ...;
return ...;我用的是VS 2005 和MsSql 2005。在网上找的结果似乎由于版本原因用不到。
请高人指点获取两个SELECT和一个 RETURN 的值,分不多,等我攒几天结帖时再加分。谢谢~~~!
@xxxx int,
''''''',
@out int out
as
begin
insert into *****
select *** from tablename where xxxx group(统计)
if@@error<>0
set @out=xx
else
set @out=yy
end
大概就这个格式吧
如果不用 union 的话,两个SELECT得到的是两个分开的记录集(可能在.net中应该不叫记录集了)。我做了很多尝试都只能取到第一个 记录集 的值。SqlDataSource-->DataView-->dv.Table.Rows[0][0] 只能取到第一个记录集的值。想问一下,返回的两个 select 结果到底是怎么存在的?是一个DataSet里的两个DataTable吗?我该如何获取里面的数据。
xiaofan_sap大哥,基本上是这样,只是我那两个SELECT一个是数据明细一个是数据合计,字段有些不同,是不能合并的。
可以返回多个 select 的哦,我以前用ASP就经常一个存储过程返回多个SELECT,最多的时候有六七个。这样可以节省链接时间提高查询速度。理由是只有一次链接,一次执行,一次返回,而且存储过程中可以把一些共用的临时数据存在表变量或者临时表中供多个SELECT使用。
http://fwq.web521.com/host/P1101/A0793605.shtml
看看这个
只有这种才能存二个数据集,sql server好像只能返回一个结果集
可以分步来写
大侠,sql server 肯定可以发挥多个结果集的啦。
dataset.tables[索引]我也多次听说,但是不知道怎么用?要先定义吧,创建,初始化,然后里面才有数据,然后才能使用,这些我都不会~~
我只会拖放控件了~~~请高人赐教。
sqlconn.ConnectionString = "省略";
sqlconn.Open();
SqlCommand sqlcomm = new SqlCommand();
sqlcomm.CommandType = CommandType.StoredProcedure;
sqlcomm.Connection = sqlconn;
sqlcomm.CommandText = "xxxx";
SqlDataAdapter sqlda = new SqlDataAdapter(sqlcomm);
DataSet ds = new DataSet();
sqlda.Fill(ds);
if (ds.Tables.Count > 0)
{
//Do sth ds.Tables[0]
//Do sth ds.Tables[1]
}
非常感谢 mjp1234airen4385 老大~~~!我用你给的代码测试成功了,稍微改了下~~~using System;
using System.Data;
using System.Data.SqlClient;//这个默认是没有的
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _0 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection sqlconn = new SqlConnection();
sqlconn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["xerp_xiaomangerConnectionString"].ToString();//这个是我在WEB.CONFIG里设置的。
sqlconn.Open();
SqlCommand sqlcomm = new SqlCommand();
sqlcomm.CommandType = CommandType.Text;//StoredProcedure,因为不知道怎么传参数,所以改为TEXT了。
sqlcomm.Connection = sqlconn;
sqlcomm.CommandText = " exec xxx '010'";
SqlDataAdapter sqlda = new SqlDataAdapter(sqlcomm);
DataSet ds = new DataSet();
sqlda.Fill(ds);
if (ds.Tables.Count > 0)
{
//Do sth ds.Tables[0]
Response.Write(ds.Tables[0].Rows[0][0]);
//Do sth ds.Tables[1]
Response.Write("<br />");
Response.Write(ds.Tables[1].Rows[0][0]);
Response.Write("<br />");
Response.Write(ds.Tables[1].Rows[0][1]);
Response.Write("<br />");
Response.Write(ds.Tables[1].Rows[0][2]);
} }
}
@xxxx int,
''''''',
@out int out
as
begin
insert into *****
select *** from tablename where xxxx group(统计)
if@@error<>0
set @out=xx
else
set @out=yy
end