2011-07-27 117 views
0

我正在研究SQLHelper類。以及如何獲得@Email值 ????????sqlhelper輸出參數

protected void Button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
     bl.user_id = TextBox1.Text; 
     DataTable dt= bl.forget(); 
     if (dt.Rows.Count != 0) 
     { 
      Response.Write( dt.Rows[0]["@Email"].ToString()); 
     } 
     } 
     catch (Exception g) 
     { 
      Response.Write(g.Message); 
     } 
    } 

B11的一部分.......

DataSet ds = SqlHelper.ExecuteDataset(bl.str, CommandType.StoredProcedure,  
       "forFetPasswo",new SqlParameter("@Email", bl.user_id)); 
        DataTable dt = new DataTable(); 
        if (ds.Tables.Count != 0) 
        { 
         dt = ds.Tables[0]; 
        } 
        return dt; 

SQL語句組成部分.......

Alter PROCEDURE Abc 
    @Email nvarchar(100)output 
AS 
BEGIN 
    if (@Email !=null) 
     begin 
     if exists(select * from UserLogin where Emailid [email protected]) 
     begin 
      select @Email ='mail send' 
     end   
     end 
     else 
     begin 
     select @Email='invalid email id' 
     end 

END 
GO 

回答

0

您正在返回的輸出參數,但不處理它.net代碼。您正在查找數據集。

快速的解決辦法是在最後

否則添加select @Email AS email到您的存儲過程,改變new SqlParameter另一個overload that uses direction

0

在您的存儲過程,你只分配@Email變量,你應該增加類似該存儲過程

select @Email as Email 

並獲得它的代碼中的端

Response.Write( dt.Rows[0]["Email"].ToString()); 

,並刪除output參數)

0

你的情況使用任一用戶的數據集或輸出參數... 因爲你是返回只有一個值....使用輸出參數。

var param=new SqlParameter("@Email",SqlDBType.VarChar,100).Direction=ParameterDirection.Output; 
SqlHelper.ExecuteNonQuery(con,Abc,param); 
var Email=param.Value.toString(); 

另外在SP利用SET而不是SELECT如果U可以.... BTW它沒有多大意義