输出两个参数的存储过程如何调用这两个参数呢??

swazn_yj 2006-08-22 01:57:07
CREATE PROCEDURE [dbo].[sw_GetAd]
@CpID int,
@AdID int=0 OUTPUT
@AdUrl varchar(200) ='' OUTPUT
AS
SET NOCOUNT ON

DECLARE @AdID_S int
DECLARE @AdUrl_S varchar(200)
SELECT @AdUrl_S=AdUrl,@AdID_S=AdID FROM Sw_Cp_Ad
WHERE CpID=@CpID AND AdType='收费' AND Fettle='正常' AND DateDiff(d,GetDate(),EndDay)>=0

IF @AdUrl_S IS null
BEGIN
SELECT @AdUrl_S=AdUrl,@AdID_S=AdID FROM Sw_Cp_Ad
WHERE CpID=@CpID AND Fettle='正常' AND AdType='免费' ORDER BY ID DESC
END

IF @AdUrl_S IS null
BEGIN
SET @AdUrl_S='-1'
END

SET @AdUrl=@AdUrl_S
SET @AdID=@AdID_S
RETURN
GO


public string Cp_GetAd(int CpID )
{
int rowsAffected;
SqlParameter[] parameters =
{
new SqlParameter( "@CpID",SqlDbType.Int,4 ),
new SqlParameter( "@AdID",SqlDbType.Int,4 ),
new SqlParameter( "@AdUrl",SqlDbType.VarChar,200 )
};

parameters[0].Value = CpID;
parameters[1].Direction =ParameterDirection.Output;(这里不知道怎么写?)
parameters[1].Direction = ParameterDirection.Output;(这里不知道怎么写?)
RunProcedure("sw_GetAd", parameters, out rowsAffected);
int AdID = (int)parameters[1].Value;
string AdUrl = (string)parameters[2].Value;
return AdUrl;
return AdID;
Connection.Close();

}

CpID = Convert.ToInt32(Request.QueryString["CpID"].Trim());
Cp_GetAdUrl GetAdUrl = new Cp_GetAdUrl();
string Flag = GetAdUrl.Cp_GetAd(CpID);

try
{
if (Flag == "-1")
{
Response.End();
return;
}
else if(Flag.Length>2)
{
//Response.Write(Flag);
//int AdID = 0;
//AdID = Convert.ToInt32(Flag);
//AddLogs(AdID,CpID);
Response.Redirect(Flag);
Response.End();
return;
}
}

catch (Exception ex)
{
Response.Write(ex.Message);
Response.End();
return;
}

我用C#调用不到返回值!!
...全文
488 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
swsky 2006-08-28
  • 打赏
  • 举报
回复
应该改造一下那个类,或者把两个参数用字符串隔开粘贴在一起当一个输出,然后再割开!
仅供参考!
xyxfly 2006-08-23
  • 打赏
  • 举报
回复
你返回值是string,当然只有一个了
xyxfly 2006-08-23
  • 打赏
  • 举报
回复
为什么只能取得一个值?

myCommand3.Parameters["@LatestVer"].Value.ToString()
比如你还有一个参数
myCommand3.Parameters["@LatestVer"].Value.ToString()
myCommand3.Parameters["@q"].Value.ToString()
myCommand3.Parameters["@a"].Value.ToString()

通过参数名呀
swazn_yj 2006-08-23
  • 打赏
  • 举报
回复
TO:xyxfly(小虾米 -_- 何去何从)
public string Cp_GetAd(int CpID )
{
int rowsAffected;
SqlParameter[] parameters =
{
new SqlParameter( "@CpID",SqlDbType.Int,4 ),
new SqlParameter( "@AdID",SqlDbType.Int,4 ),
new SqlParameter( "@AdUrl",SqlDbType.VarChar,200 )
};

parameters[0].Value = CpID;
parameters[1].Direction =ParameterDirection.Output;(这里不知道怎么写?)
parameters[1].Direction = ParameterDirection.Output;(这里不知道怎么写?)
RunProcedure("sw_GetAd", parameters, out rowsAffected);
int AdID = (int)parameters[1].Value;
string AdUrl = (string)parameters[2].Value;
return AdUrl;
return AdID;
Connection.Close();

}
这个过程取得两个参数后,我怎么调用这个过程再传递一下呢??

Cp_GetAdUrl GetAdUrl = new Cp_GetAdUrl();
string Flag = GetAdUrl.Cp_GetAd(CpID);

我这样写只能取得一个值!!问题在这里!!!
turenjie 2006-08-23
  • 打赏
  • 举报
回复
收藏..........
xyxfly 2006-08-23
  • 打赏
  • 举报
回复
前面连接语句如下:
SqlConnection myConnection3 = new SqlConnection(SQLCONNECTIONSTRING);
SqlCommand myCommand3 = new SqlCommand("[GetPIILVerLa]", myConnection3);
myCommand3.CommandType = CommandType.StoredProcedure;


调用存储过程后myCommand3.Parameters["@LatestVer"].Value.ToString()
就可以获得@LatestVer的值

楼主可参考这个改成你自己需要的
xyxfly 2006-08-23
  • 打赏
  • 举报
回复
myCommand3.Parameters["@LatestVer"].Value.ToString()
这样子就可以了
swazn_yj 2006-08-23
  • 打赏
  • 举报
回复
up!!
xyxfly 2006-08-23
  • 打赏
  • 举报
回复
只接触过一个月的asp.net,还没来得及学就不用了,呵呵......

说得不对楼主见谅 ^_^
xyxfly 2006-08-23
  • 打赏
  • 举报
回复
不知道你为什么要设计成这样子,
parameters[0].Value = CpID;
parameters[1].Direction =ParameterDirection.Output;(这里不知道怎么写?)
parameters[1].Direction = ParameterDirection.Output;(这里不知道怎么写?)
RunProcedure("sw_GetAd", parameters, out rowsAffected);
int AdID = (int)parameters[1].Value; ---
string AdUrl = (string)parameters[2].Value; ---这里不是可以用了吗?
个人觉得你这样设计是不合理的,
你是要在其他地方用吗? 可以考虑全局变量,session,cookie,或者你把public string Cp_GetAd(int CpID )这个加两个参数,指针或引用,就是在函数里面改变了,可以把值传回来那种
swazn_yj 2006-08-23
  • 打赏
  • 举报
回复
那应该是什么?
swazn_yj 2006-08-22
  • 打赏
  • 举报
回复
Up!!!
swazn_yj 2006-08-22
  • 打赏
  • 举报
回复
定义我都定义过了,就是在用C#写过程的时候不知道怎么分别取得两个参数??
新鲜鱼排 2006-08-22
  • 打赏
  • 举报
回复
//首先定义参数的类型是输出参数
parameters[1].Direction =ParameterDirection.Output;

//ExecuteNonQuery()结束以后,再获取这个参数
int id= (int)(cmd.Parameters[1].Value);


xyxfly 2006-08-22
  • 打赏
  • 举报
回复
没排一下,看着比较乱,复制出去看就好了^_^
xyxfly 2006-08-22
  • 打赏
  • 举报
回复
SqlConnection myConnection3 = new SqlConnection(SQLCONNECTIONSTRING);
SqlCommand myCommand3 = new SqlCommand("[GetPIILVerLa]", myConnection3);
myCommand3.CommandType = CommandType.StoredProcedure;
myCommand3.Parameters.Add(new SqlParameter("@LatestVer", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Output, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
myCommand3.Parameters.Add(new SqlParameter("@ProName", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
myCommand3.Parameters.Add(new SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
myCommand3.Parameters["@ProName"].Value = DropDownListProject.SelectedValue;
myConnection3.Open();
myCommand3.ExecuteNonQuery();
if (Int32.Parse(myCommand3.Parameters["@RETURN_VALUE"].Value.ToString()) == 1)
{
myConnection3.Close();
string strJS1;
strJS1 = "<SCRIPT language='javascript' type='text/javascript'>\r\nalert(\"There is a ProjectIIL Beta Version, Please Update it First!\");\r\nwindow.location='../IIL/ProjectIIL.aspx'\r\n</SCRIPT>";
this.RegisterStartupScript("strJS1",strJS1);
}
else if (myCommand3.Parameters["@LatestVer"].Value.ToString() != DropDownListProjectVer.SelectedValue.ToString())
{
myConnection3.Close();
string strJS;
strJS = "<SCRIPT language='javascript' type='text/javascript'>\r\nalert(\"The ProjectIIL Version that you selected is not the latest version!\");\r\nwindow.location='../IIL/ProjectIIL.aspx'\r\n</SCRIPT>";
this.RegisterStartupScript("strJS",strJS);
}
.........
供参考
xyxfly 2006-08-22
  • 打赏
  • 举报
回复
myCommand3.Parameters.Add(new SqlParameter("@LatestVer", System.Data.SqlDbType.VarChar, 20, System.Data.ParameterDirection.Output, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));

添加参数的时候可以直接指定为output
用的时候可以这样
myCommand3.Parameters["@LatestVer"].Value.ToString()
fcuandy 2006-08-22
  • 打赏
  • 举报
回复
C#中的参数声明没有问题.
但是你的 RunProcdure这个方法的原型看不到,估计出错在这里.

假设直接用 SqlCommand对象来执行的话

SqlCommand cmd = new SqlCommand();
cmd.CommandText = "sw_GetAd";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = 要绑定的那个连接;
....
cmd.Parameters.Add("@AdID", System.Data.SqlDbType.Int, 8);
cmd.Parameters["@AdID"].Direction = ParameterDirection.Output;
...
SqlDataReader dr = cmd.ExecuteReader();
int AdID = (int)(cmd.Parameters["@RecCount"].Value);
splory 2006-08-22
  • 打赏
  • 举报
回复
两个参数的情况也就同理了
splory 2006-08-22
  • 打赏
  • 举报
回复
mycom.Parameters.Add("@pageCount", SqlDbType.Int, 4);
mycom.Parameters["@pageCount"].Direction = ParameterDirection.Output;
执行后这样就可得到值
mycom.ExecuteNonQuery();
int pageCount = Convert.ToInt32(mycom.Parameters["@pageCount"].Value);
加载更多回复(3)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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