2017-05-14 183 views
0

我试图从MySql服务器验证用户名和密码。登录验证正在发挥作用,但我不能为了我的生活找出为什么“创建新用户”验证不起作用。ASP.NET C#验证用户名和密码

以下是注册新用户的代码。会发生什么事;

catch (Exception) 
    { 
     Label1.Text = "Brukernavnet er allerede i bruk"; 
    } 

看起来这部分^是破坏它,我不知怎么的,每当我试运行此代码,我得到这个消息。

protected void newBtn_Click(object sender, EventArgs e) 
    { 
     String cs = "Database=trafikkskole; User=user; Password=password"; 
     MySqlConnection dbconnect = new MySqlConnection(cs); 

     try 
     { 

      dbconnect.Open(); 
      cmd.CommandText = "INSERT INTO user (username, password) VALUES (@un, @pw)"; 
      cmd.Parameters.AddWithValue("@un", inputUser.Text); 
      cmd.Parameters.AddWithValue("@pw", inputPw.Text); 
      cmd.Connection = dbconnect; 
      int a = cmd.ExecuteNonQuery(); 

      if (a > 0) 
      { 
       Label1.Text = "Gratulerer! Du har nå laget en bruker!"; 
      } 

      else 
      { 
       Label1.Text = "ERROR"; 
      } 

     } 

     catch (Exception) 
     { 
      Label1.Text = "Brukernavnet er allerede i bruk"; 
     } 

     finally 
     { 
      dbconnect.Close(); 
     } 
    } 

} 

编辑:

如果我试着这样说:

protected void newBtn_Click(object sender, EventArgs e) 
    { 
     String cs = "Database=trafikkskole; User=root; Password=root"; 
     MySqlConnection dbconnect = new MySqlConnection(cs); 

     String sql = "SELECT * FROM user"; 
     MySqlCommand cmd = new MySqlCommand(sql, dbconnect); 
     da = new MySqlDataAdapter(cmd); 
     MySqlCommandBuilder cb = new MySqlCommandBuilder(da); 
     ds = new DataSet("TEST"); 
     da.Fill(ds, "user"); 
     Response.Write(ds.Tables["user"].Rows.Count);  

     try 
     { 

      dbconnect.Open(); 
      cmd.CommandText = "INSERT INTO user (username, password) VALUES (@un, @pw)"; 
      cmd.Parameters.AddWithValue("@un", inputUser.Text); 
      cmd.Parameters.AddWithValue("@pw", inputPw.Text); 
      cmd.Connection = dbconnect; 
      int a = cmd.ExecuteNonQuery(); 

      if (a > 0) 
      { 
       Label1.Text = "Gratulerer! Du har nå laget en bruker!"; 
      } 

      else 
      { 
       Label1.Text = "ERROR"; 
      } 

     } 



     catch (Exception Exception) 
     { 
      Label1.Text = "Brukernavnet er allerede i bruk"; 

     } 

     finally 
     { 
      dbconnect.Close(); 
     } 
    } 

} 

这与使用户无需用户名或密码的可能性结束。

+0

请问您可以使用您的例外日志进行编辑。比如'catch(Exception ex) {Debug.Writeline(ex.ToString()); }' – amarnath

+0

如果你试图捕获插入的结果,而不是把'int a = cmd.ExecuteNonQuery();'尝试用'int a = cmd.ExecuteScalar();' – Flxtr

+0

@amarnath 我唯一可能产生的是: CS0169字段'login.da'从不使用。 CS0169字段'login.ds'从不使用。 CS0169字段'login.cb'从不使用。 –

回答

0

有很多事情可能会出错。您应该检查exception.message以获取有关它的可能性的见解。

例如,在catch语句中放置一个断点,并查看是否抛出异常(例如...)用户名已存在,并且SQL引发错误。 ...或者是用户名/密码为空,太长等...

无论如何,将catch语句更改为catch(Exception exception)并查看例外情况。

+0

数据库目前只有一个用户,并且不管我输入什么信息都会弹出此消息。 –

+0

这是发生了什么事情: CS0168 C#声明变量'Exception'但从未使用 –

+0

我认为这不是错误消息,这是一条警告消息。 – shinjidev

0

我想感谢大家的努力,找到一个工作解决方案,将它发布在这里供将来参考。

protected void newBtn_Click(object sender, EventArgs e) 

     { 
     String cs = "Database=trafikkskole; User=root; Password=root"; 
     MySqlConnection dbconnect = new MySqlConnection(cs); 

     try 
     { 

      if (!string.IsNullOrWhiteSpace(inputUser.Text) && !string.IsNullOrWhiteSpace(inputPw.Text)) 
      { 
       dbconnect.Open(); 
       Label1.Text = "Gratulerer! Du har nå laget en bruker!"; 
       string qry = "INSERT INTO user(username, password) VALUES (@un, @pw)"; 
       cmd = new MySqlCommand(qry, dbconnect); 
       cmd.Parameters.AddWithValue("@un", inputUser.Text); 
       cmd.Parameters.AddWithValue("@pw", inputPw.Text); 
       cmd.Connection = dbconnect; 
       cmd.ExecuteNonQuery(); 
      } 

      else 
      { 
       Label1.Text = "ERROR"; 
      } 

     } 

     catch (Exception) 
     { 
      Label1.Text = "Brukernavnet er allerede i bruk"; 

     } 


     finally 
     { 
      dbconnect.Close(); 
     } 
    }