sqlhelper输出参数

时间:2011-07-27 12:12:04

标签: asp.net sql-server

我正在研究SQLHelper类。以及如何获得@Email值  ????????

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

Bll part .......

 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 part .......

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

END
GO

3 个答案:

答案 0 :(得分:0)

您正在返回输出参数,但未在.net代码中处理它。您正在寻找数据集。

快速解决方法是在最后添加select @Email AS email到您的存储过程

否则,请将new SqlParameter更改为另一个overload that uses direction

答案 1 :(得分:0)

在你的存储过程中你只分配@Email变量,你应该在存储过程的末尾添加类似的东西

 select @Email as Email

并在代码

中访问它
Response.Write(  dt.Rows[0]["Email"].ToString());  

并删除output参数;)

答案 2 :(得分: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,如果你可以....顺便说一下它没关系