2011-07-27 73 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它没有多大意义