輸出兩個參數的存儲過程如何調用這兩個參數呢??


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#調用不到返回值!!

23 个解决方案

#1


new SqlParameter( "@AdID",SqlDbType.Int,4 ),
new SqlParameter( "@AdUrl",SqlDbType.VarChar,200 )

這兩句要改,指明輸出參數

parameters[1].Direction =ParameterDirection.Output;(這里不知道怎么寫?)
        parameters[1].Direction = ParameterDirection.Output;(這里不知道怎么寫?)
這兩句可以去掉

#2


沒看懂啊,老大!

#3


SqlParameter應該有個參數指明是否輸出參數的
在這里設置

#4


mycom.Parameters.Add("@pageCount", SqlDbType.Int, 4);
mycom.Parameters["@pageCount"].Direction = ParameterDirection.Output;
執行后這樣就可得到值
mycom.ExecuteNonQuery();
int pageCount = Convert.ToInt32(mycom.Parameters["@pageCount"].Value);

#5


兩個參數的情況也就同理了

#6


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);

#7


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()

#8


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);
}
.........
供參考

#9


沒排一下,看着比較亂,復制出去看就好了^_^

#10


//首先定義參數的類型是輸出參數
parameters[1].Direction =ParameterDirection.Output;

//ExecuteNonQuery()結束以后,再獲取這個參數
int id= (int)(cmd.Parameters[1].Value);


#11


定義我都定義過了,就是在用C#寫過程的時候不知道怎么分別取得兩個參數??

#12


Up!!!

#13


up!!

#14


myCommand3.Parameters["@LatestVer"].Value.ToString() 
這樣子就可以了

#15


前面連接語句如下:
SqlConnection myConnection3 = new SqlConnection(SQLCONNECTIONSTRING);
SqlCommand myCommand3 = new SqlCommand("[GetPIILVerLa]", myConnection3);
myCommand3.CommandType = CommandType.StoredProcedure;


調用存儲過程后myCommand3.Parameters["@LatestVer"].Value.ToString() 
就可以獲得@LatestVer的值

樓主可參考這個改成你自己需要的

#16


收藏..........

#17


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);

我這樣寫只能取得一個值!!問題在這里!!!

#18


為什么只能取得一個值?

myCommand3.Parameters["@LatestVer"].Value.ToString() 
比如你還有一個參數
myCommand3.Parameters["@LatestVer"].Value.ToString()
myCommand3.Parameters["@q"].Value.ToString()
myCommand3.Parameters["@a"].Value.ToString()

通過參數名呀

#19


你返回值是string,當然只有一個了

#20


那應該是什么?

#21


不知道你為什么要設計成這樣子,
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 )這個加兩個參數,指針或引用,就是在函數里面改變了,可以把值傳回來那種

#22


只接觸過一個月的asp.net,還沒來得及學就不用了,呵呵......

說得不對樓主見諒  ^_^

#23


應該改造一下那個類,或者把兩個參數用字符串隔開粘貼在一起當一個輸出,然后再割開!
僅供參考!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com