2013-12-08 4 views
0

У меня возникли проблемы с записью информации в мою базу данных. Я использовал метод, который я узнал из просмотра видео на Youtube, где мы сделали query string и ввели все файлы INSERT INTO, но я пытаюсь использовать новый способ, используя параметры, которые я прочитал, чтобы быть более безопасными и защищать от SQL-инъекций, которые я прочитали, чтобы быть плохим.Данные, не записываемые в базу данных MYSQL

Я использую следующий код: все работает нормально, нет ошибок, оно подключается к моему FTP-серверу и делает все это в порядке. Моя проблема заключается в том, что он не записывает какую-либо введенную пользовательскую информацию в базу данных MYSQL, как раньше, когда я использовал менее защищенный код.

Также, если тот, кто отвечает на этот вопрос, знает, как проверить, было ли имя пользователя уже взято в базе данных, пожалуйста, дайте мне знать, поэтому мне не нужно задавать отдельный вопрос. Я пытался что-то вроде

if(Reader.HasRows) MessageBox.Show("Username Taken"); 

, но я получил ошибку Use of unassigned local variable 'reader'.

код я использую:

private void btnRegister_Click(object sender, EventArgs e) 
    { 
    MySqlDataReader reader; 
    int numerror = 0; 
    if (RUsernameTextBox.Text == "") 
    { 
     numerror = numerror + 1; 
    } 
    if (RPasswordTextBox.Text == "") 
    { 
     numerror = numerror + 1; 
    } 
    if (REmailTextBox.Text == "") 
    { 
     numerror = numerror + 1; 
    } 
    if (numerror == 1) 
    { 
     ErrorLabel.Text = "*1 required field is blank."; 
    } 
    else if (numerror == 2) 
    { 
     ErrorLabel.Text = "*2 required fields are blank"; 
    } 
    else if (numerror == 3) 
    { 
     ErrorLabel.Text = "*3 required fields are blank"; 
    } 
     else 
     { 
     if (reader.HasRows) CMessageBox("Error", ""); 
      //add the user to the MySQL database 
      string HashedPassword = EncodePassword(RPasswordTextBox.Text); 
      string constring = "datasource=localhost;port=3306;username=Admin;password=**********"; 
      using (MySqlConnection con = new MySqlConnection(constring)) 
      { 
       MySqlCommand cmd = new MySqlCommand("INSERT INTO userinfo.users (username,password,email,premium,picture) VALUES (@username, @hashedpassword, @email , @premium , @picture);"); 
       cmd.CommandType = CommandType.Text; 
       cmd.Connection = con; 
       cmd.Parameters.AddWithValue("@Username", RUsernameTextBox.Text); 
       cmd.Parameters.AddWithValue("@hashedpassword", HashedPassword); 
       cmd.Parameters.AddWithValue("@email", REmailTextBox.Text); 
       cmd.Parameters.AddWithValue("@premium", "0"); 
       cmd.Parameters.AddWithValue("@picture","ftp://***.***.*.**/Profile Pictures/" + RUsernameTextBox.Text + Path.GetFileNameWithoutExtension(RProfilePicture.ImageLocation) + ".png"); 

       try 
       { 
        con.Open(); 
        cmd.ExecuteNonQuery(); 
        con.Close(); 
        MakeLoginVisible(); 
        try 
        { 
         string TempFolder = Path.GetTempPath(); 
         RProfilePicture.Image.Save(@"C:\temp\" + Path.GetFileNameWithoutExtension(RProfilePicture.ImageLocation) + ".png", System.Drawing.Imaging.ImageFormat.Png); 
         ftp ftpclient = new ftp(@"ftp://***.***.*.**/", "Admin", "**********"); 
         ftpclient.createDirectory("Profile Pictures/" + RUsernameTextBox.Text); 
         ftpclient.upload("Profile Pictures/" + RUsernameTextBox.Text + "/" + Path.GetFileNameWithoutExtension(RProfilePicture.ImageLocation) + ".png", @"C:\temp\" + Path.GetFileNameWithoutExtension(RProfilePicture.ImageLocation) + ".png"); 
         MakeLoginVisible(); 
         CMessageBox("Success!", "AirSpace Account '" + RUsernameTextBox.Text + "' Created."); 
         ftpclient = null; 
        } 
        catch (Exception ex) 
        { 
         CMessageBox("Error", ex.Message.ToString()); 
        } 
       } 
       catch (Exception ex) 
       { 
        CMessageBox("Error", ex.Message.ToString()); 
       } 
      } 
     } 
+2

Тогда вы можете сказать нам, какие странная ошибка, которую вы получили, запустив код снова? «У меня есть какая-то странная ошибка, которую я не могу вспомнить» недостаточно. –

+0

'У меня есть какая-то странная ошибка, о которой я не могу вспомнить' = не полезно – Steve

+0

@ AndersLindén Извините за то, что не понял, ошибка, которую я получил, когда отладка была« Использование непризнанной локальной переменной «читатель» –

ответ

1

Использование неназначенную локальной переменной «ххх»

означает, что компилятор не может сделать вывод, что вы дали некоторую переменную величину в определенное время. Присвоение ему чего-либо, в том числе null, удалит это сообщение об ошибке, так как тогда компилятор будет знать, что вы все подумали над содержимым переменной.

+0

Обновленный код с остальной частью того, что я считаю важным. –

+0

MySqlDataReader reader; является единственным кодом, который предшествует использованию считывателя переменных. Но читатель должен содержать что угодно, его следует использовать для чтения чего-либо, вы хотите, чтобы значения поступали из базы данных? –

+0

Да, я хотел бы, чтобы читатель мог проверить, содержит ли база данных имя пользователя, для которого пользователь пытается зарегистрировать учетную запись. –

0

Я мог бы быть неправильно, как я не работать непосредственно MySQL через .net, но в другой ответ-х я видел, параметры обрабатываются с «?», А не «@»

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