我用一个web form做为用户登录的界面,当用户输入ID和密码时,就调用SQL Server的一个stored procedure来验证Customer表中是否存在这个用户ID和密码。如果存在的话,就从这个用户登陆的web form跳转到第二个web form.我现在的问题是当我点击了button按钮以后,web窗体不会跳转到第二个web窗体,请大家帮我看看应该怎么改我的代码如下:public partial class MainPage : System.Web.UI.Page 
{
    private SqlConnection conn = new SqlConnection("Integrated Security= true;Initial Catalog=RoadsideMart;Data Source=huyufeng;");    protected void Page_Load(object sender, EventArgs e)
    {
        if (conn.State == ConnectionState.Closed)
            conn.Open();
    }
    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (conn.State == ConnectionState.Closed)
            conn.Open();        string sqlStr = "exec sp_validateUser ";        sqlStr += Username.Text + ", \'" + Password.Text + "\'";        SqlCommand cmd = new SqlCommand(sqlStr, conn);        int rtValue = (int)cmd.ExecuteScalar();        if (rtValue == 1)
        {
            Server.Transfer("Default2.aspx");
        }
    }
}
对应的stored procedure叫sp_validateUser,代码如下:
Create procedure sp_validateUser@userId int,
@inputPassword varchar(6)ASbegin
declare @userIdChar varchar(30) set @userIdChar = @userId declare @rtValue int if( @userIdChar = '')
set @rtValue = 0
else
begin
select @rtValue = 1 from Customer where ID = @userIdChar AND password = @inputPassword

if (@rtValue <> 1)
set @rtValue = 0
end

return @rtValue
end我估计问题应为我没写button按钮的click事件,但是我不知道该怎么改好,请大家帮我看看吧,谢谢了。

解决方案 »

  1.   

    调用stored procedure一般都是这样的:SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");SqlCommand salesCMD = new SqlCommand("SalesByCategory", nwindConn);
    salesCMD.CommandType = CommandType.StoredProcedure;SqlParameter myParm = salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15);
    myParm.Value = "Beverages";nwindConn.Open();SqlDataReader myReader = salesCMD.ExecuteReader();
    另外设置个断点跟踪一下就什么都知道了。
      

  2.   

    visual studio比较牛的地方是可以trace into的stored procedure.参考:
    How to: Enable SQL Server Debugging 
    http://msdn.microsoft.com/en-us/library/09x4a6at(VS.80).aspx
      

  3.   


    --且不说别的,你的程序里面调用存储过程用的方法是返回首行首列,那么你的存储过程就不能像现在这样写:
    Create procedure sp_validateUser@userId int,
    @inputPassword varchar(6)ASbegin
        declare @userIdChar varchar(30)    set @userIdChar = @userId    declare @rtValue int    if( @userIdChar = '')
            set @rtValue = 0
        else
            begin
                select @rtValue = 1 from Customer where ID = @userIdChar AND password = @inputPassword
            
                if (@rtValue <> 1)
                    set @rtValue = 0
            end
        
        select @rtValue --这里应该改成这样``
    end
      

  4.   

    因为你获取的首行首列  rtValue  的值不为1
      

  5.   

    public partial class MainPage : System.Web.UI.Page 
    {
        private SqlConnection conn = new SqlConnection("Integrated Security= true;Initial Catalog=RoadsideMart;Data Source=huyufeng;");    protected void Page_Load(object sender, EventArgs e)
        {
            if (conn.State == ConnectionState.Closed)
                conn.Open();
        }
        protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (conn.State == ConnectionState.Closed)
                conn.Open();        string sqlStr ="";
            sqlStr = "select count(*)from a where Username ='"+Username.Text + "' and  Password= '" + Password.Text + "'";        SqlCommand cmd = new SqlCommand(sqlStr, conn);        int rtValue = (int)cmd.ExecuteScalar();        if (rtValue == 1)
            {
                Server.Transfer("Default2.aspx");
            }
        }
    }
      

  6.   

     protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) 还有你这个事件应该是 button的事件吧? 
        { 
            if (conn.State == ConnectionState.Closed) 
                conn.Open();         string sqlStr =""; 
            sqlStr = "select count(*)from a where Username ='"+Username.Text + "' and  Password= '" + Password.Text + "'";         SqlCommand cmd = new SqlCommand(sqlStr, conn);         int rtValue = (int)cmd.ExecuteScalar();         if (rtValue == 1) 
            { 
                Server.Transfer("Default2.aspx"); 
            } 
        } 
    }
      

  7.   

    谢谢大家给我的意见,我很想知道,那在我这个程序里,自定义验证控件和Button空间里各自应该写什么才比较合理呢。因为我希望如果后台的customer表里没有这个用户的话,可以在web form里,自定义验证控件会显示“该用户不存在”这样的信息。
      

  8.   

    button里面就是执行sql语句找到@rtValue的值,自定义验证控件紧接着根据检索出的@rtValue给出提示信息,你是想这样做吗?
      

  9.   

    那就写一个方法,放在 button_click事件中,搜索+判断,自定义验证控件里面不需要加什么,只在上述函数中对他赋一个值就行了
    试试吧...
      

  10.   

    感谢所有的好朋友,给了我这么多建议和帮助。看了大家的回复之后,我的问题也得到圆满解决了,再次感谢大家了。我就把分数给对我启发最大,帮助最大的朋友们了。特别感谢pt1314917,wojiaochenglong的建议,对我帮助真的很大,还要感谢下jijunwu,你的回答也真是一针见血,总之再次感谢大家了。