private void Button1_Click(object sender, System.EventArgs e)
{
if(Authenticate(TextBox1.Text,TextBox2.Text ))
{
Response.Write("authenticated"); }
else
{
Response.Write("not authenticated");
} } private bool Authenticate(string username, string password)
{

SqlConnection conn = new SqlConnection ("server=localhost;" + "database=sx;Trusted_Connection=Yes");
try
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sx_login"; SqlParameter ParameterUserName = new SqlParameter("@UserName",SqlDbType.VarChar,20);
ParameterUserName.Value = username;
cmd.Parameters.Add(ParameterUserName); SqlParameter ParameterPassword = new SqlParameter("@Password",SqlDbType.VarChar,50);
ParameterPassword.Value = password;
cmd.Parameters.Add(ParameterPassword);
 
int usercount = Convert.ToInt16(cmd.ExecuteScalar());
if(usercount>0)
{
return true;
}
else
{
return false;
}
}
finally
{
conn.Close();
}
不论我在登录界面输入正确的用户名和密码,还是乱输的,都显示not authenticated,但我找不到错在哪里,帮我看一下。

解决方案 »

  1.   

    可能是try语句块中间的过程出错了,但是没有被catch
    所以程序看似正确,实际上是链接、数据库存储过程中任何环节出现的问题都被掩盖起来了至少,推荐的编程风格是每隔try至少有个catch对应。
      

  2.   

    对 加catch
    再看看出错信息
    或在catch块中中断一下
    检查下变量值
      

  3.   

    private void Button1_Click(object sender, System.EventArgs e)
    {
    if(FormsAuthentication.Authenticate(TextBox1.Text,TextBox2.Text ))
    {
    Response.Write("authenticated"); }
    else
    {
    //Response.Redirect("sx_teacher_nfo/sxteacherinfo.aspx");
    Response.Write("not authenticated");
    } } private bool Authenticate(string username, string password)
    {
    SqlConnection conn = new SqlConnection("server=localhost;" + "database=sx;Trusted_Connection=Yes");
    try
    {
    conn.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "sx_login"; SqlParameter ParameterUserName = new SqlParameter("@UserName",SqlDbType.VarChar,20);
    ParameterUserName.Value = username;
    cmd.Parameters.Add(ParameterUserName); SqlParameter ParameterPassword = new SqlParameter("@Password",SqlDbType.VarChar,50);
    ParameterPassword.Value = password;
    cmd.Parameters.Add(ParameterPassword);}

    catch (Exception e)
    {
    int usercount = Convert.ToInt16(cmd.ExecuteScalar());
    if(usercount>0)
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    finally
    {
    conn.Close();
    }
    }加catch后说找不到类型或命名空间名称“cmd”(是否缺少 using 指令或程序集引用?),不可能的呀,cmd是有定义的了。
      

  4.   

    int usercount = Convert.ToInt16(cmd.ExecuteScalar());
    是说这句的cmd有错
      

  5.   

    cmd有错会不会是你的sql连接不正确呀.
      

  6.   

    int usercount = Convert.ToInt16(cmd.ExecuteScalar());
    放倒 try块里面去,刚才看错了.或者把cmd的定义放到外层去
      

  7.   

    catch (Exception e)
    {
    int usercount = Convert.ToInt16(cmd.ExecuteScalar());
    ============================
    这是什么语句?????????????????????
      

  8.   

    private bool Authenticate(string username, string password)
    {
    SqlConnection conn = new SqlConnection("server=localhost;" + "database=sx;Trusted_Connection=Yes");
    try
    {
    conn.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "sx_login"; SqlParameter ParameterUserName = new SqlParameter("@UserName",SqlDbType.VarChar,20);
    ParameterUserName.Value = username;
    cmd.Parameters.Add(ParameterUserName); SqlParameter ParameterPassword = new SqlParameter("@Password",SqlDbType.VarChar,50);
    ParameterPassword.Value = password;
    cmd.Parameters.Add(ParameterPassword);
    int usercount = Convert.ToInt16(cmd.ExecuteScalar());
    if(usercount>0)
    {
    return true;
    }
    else
    {
    return false;
    }
      
    }

    catch (Exception e)
    {
    Response.Write("<script language=javascript>alert('"+e.ToString()+"')</script>");
    }
    finally
    {
    conn.Close();
    }
    }
      

  9.   

    为什么把这段:
    int usercount = Convert.ToInt16(cmd.ExecuteScalar());
    if(usercount>0)
    {
    return true;
    }
    else
    {
    return false;
    }放在catch里?catch表示的是异常,你的cmd不发生异常就不会执行这里,把这段放在try{}里试试.
    我觉得你这么写有点麻烦,我觉得用存储过程的输出参数就最好了,将查找到的记录数放到输出参数里,然后判断这个输出参数是多少,来返回验证是否成功.还有,你的sx_login存储过程是怎么写的???帖出来给大家look  look.
      

  10.   

    CREATE PROCEDURE dbo.sx_login 
          @UserName  varchar(8),
          @Password       varchar(8)
    as
          select sx_logon , sx_pwd   from sx_logo  where  sx_logon = @UserName  And  sx_pwd = @Password
    GO
      

  11.   

    加一个输出参数
         @intCount .......
    as
        set intCount=(  select count(1)   from sx_logo  where  sx_logon = @UserName  And  sx_pwd = @Password)
    GO