2013-12-13 2 views
0
 private void Button1Click(object sender, EventArgs e) 
    { 
     var dt = new DataTable(); 
     const string Connectionstring = "Data Source=GARETH-PC1;Initial Catalog=Genres;Integrated Security=True"; 
     using (var con = new SqlConnection(Connectionstring)) 
     { 
      con.Open(); 
       var query = "Select Username From Login Where Username ='" + ComboBox1.SelectedText + "' Password ='" + textBox2.Text + "'"; 
       using (var sda = new SqlDataAdapter(query, con)) 
       { 

       sda.Fill(dt); 
      } 

     } 

     if (dt.Rows[0].ItemArray.GetValue(0).ToString() == "1") 

     { 
      Hide(); 

      var ss = new Main(); 
      ss.Show(); 
     } 
     else 
     { 
      MessageBox.Show("Invalid Username or Password"); 
     } 
    } 

КРП (dt.Rows [0] .ItemArray.GetValue (0) .ToString() == "1") - возвращает ошибку говоря, что нет ничего в таблице ... Но есть какие-то предложения?Ошибка в Win Form Вход

+0

Как вы достигли убеждения, что у вас есть запись? – Steve

+0

Извините, что в программировании. – user3099540

+0

У меня установлены таблицы SQL. Колонки с тестовыми именами пользователей помещаются внутри. - Но когда я запускаю отладчик, он находит таблицу, но внутри ничего нет. – user3099540

ответ

0

Может быть, вы можете попробовать, как это:

dt.Rows[0]["ColumnName"].ToString() 

Это работает для меня.

+0

Невозможно преобразовать String в bool - это ошибка, которую я получаю – user3099540

+0

Я имел в виду: if (dt.Rows [0] ["ColumnName"]. ToString() == "1") {...} –

0

Я бы изменил ваш код таким образом. Во-первых, изменение параметризованных запросов вместо конкатенации (Sql Injection и синтаксического анализа) Во-вторых, используйте свойство счета, чтобы проверить, если вы нашли запись или нет

private void Button1Click(object sender, EventArgs e) 
{ 
    var dt = new DataTable(); 
    const string Connectionstring = "Data Source=GARETH-PC1;Initial Catalog=Genres;Integrated Security=True"; 
    var query = "Select Username From Login Where Username [email protected] AND [email protected]"; 
    using (var con = new SqlConnection(Connectionstring)) 
    using (var cmd = new SqlCommand(query, con) 
    { 
     con.Open(); 
     cmd.Parameters.AddWithValue("@uname", ComboBox1.SelectedText); 
     cmd.Parameters.AddWithValue("@pwd", textBox2.Text); 
     using (var sda = new SqlDataAdapter(cmd)) 
     { 
      sda.Fill(dt); 
     } 
    } 
    if (dt.Rows.Count > 0) 
    { 
     Hide(); 

     var ss = new Main(); 
     ss.Show(); 
    } 
    else 
    { 
     MessageBox.Show("Invalid Username or Password"); 
    } 
} 

Как примечание стороны, это очень плохая идея хранить пароли в виде обычного текста внутри базы данных. Вы должны рассмотреть возможность использования HASH и сохранить его вместо простого пароля.

+0

Эта строка выше кода не работает, просто дает мне ошибки. – user3099540

+1

Я могу помочь вам, если вы скажете точное сообщение об ошибке. – Steve

+0

Действительно плохой идеей наводнить сайт тонами одинаковых вопросов. Вы рискуете быть заблокированным. Но часть от этого. Синтаксическая ошибка, которую вы упомянули в других вопросах, не должна присутствовать в запросе выше, если вы введете ее точно так же, как я сделал. Попробуйте использовать отладчик, поместите контрольную точку в init этого метода, а затем выполните шаг за шагом, пока не нажмете на исключение и не проверите на каждом проходе значения и используемые строки. Одним из самых важных качеств для программиста является терпеливость. – Steve

Смежные вопросы