2012-02-12 2 views
0

ОК Итак, в основном я создал таблицу MySQL на PhpMyAdmin. Это локальный хост, имя пользователя root и пароль.Подключение MySQL с Visual C# Express 2008

Я работаю над Windows-приложением на основе C# на Visual Express 2008. У меня есть следующий код для кнопки для сохранения/загрузки данных из MySQL (я следил за некоторыми ссылками/тегами, чтобы добраться до этого момента, но не знаю, как это теоретически можно связать с MySQL @ phpmyadmin, я имею в виду, что мне не нужен файл для загрузки из базы данных PhpmyAdmin и ссылки или добавить его в качестве плагина к скрипту или что-то в этом роде? Tottaly здесь потерял ..):

 String connString = "SERVER = localhost; DATABASE = request; User ID = root; ID =; UserName =; Date =; Type =; Rules =;"; 
     MySqlConnection mcon = new MySqlConnection(connString); 
     String command = "SELECT * FROM requesttcw"; 
     MySqlCommand cmd = new MySqlCommand(command, mcon); 
     MySqlDataReader reader; 

     try 
     { 
      mcon.Open(); 
      cmd.ExecuteNonQuery(); 
      reader = cmd.ExecuteReader(); 
      cmd.CommandType = System.Data.CommandType.Text; 
      while (reader.Read() != false) 
      { 
       Console.WriteLine(reader["ID"]); 
       Console.WriteLine(reader["ClanName"]); 
       Console.WriteLine(reader["Date"]); 
       Console.WriteLine(reader["Type"]); 
       Console.WriteLine(reader["Rules"]); 

      } 

      Console.ReadLine(); 

     } 
     catch (Exception) 
     { 
      MessageBox.Show("ERROR: There was an error trying to connect to the DB!"); 
      return; 
     } 
     cmd.CommandText = "INSERT INTO requesttcw (ClanName, Date, Type, Rules) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "', '" + richTextBox1.Text + "' LIMIT 1)"; 

     try 
     { 
      cmd.ExecuteNonQuery(); 
      MessageBox.Show("You're Request Has Been Posted!"); 
     } 
     catch (Exception ex) 
     { 
      string message = ("ERROR: There was an error submitting your form!" + ex + ""); 
      DialogResult result = MessageBox.Show(message, "ERROR", MessageBoxButtons.RetryCancel, MessageBoxIcon.Question); 

      switch (result) 
      { 
       case DialogResult.Retry: 
        Application.Restart(); 
        break; 
       case DialogResult.Cancel: 
        this.Close(); 
        break; 
      } 
     } 

Когда я запускаю его, введите свои данные и нажмите кнопку, это дает мне эту ошибку на линии (MySqlConnection MCON = новый MySqlConnection (connString); * Ключевое слово не поддерживается. Имя параметра: id *

Пожалуйста, расскажите, как полностью подключить это к MySQL .. Я также загрузил MySQL-коннектор и ссылался на файл mysql.data.dll. Так что часть делается слишком ...

ответ

3

Попробуй следующую строку соединения:

string connString = "Server=localhost;Database=request;Uid=root;Pwd=;"; 

попробовать также очистит ваш код и убедитесь, что вы правильно распоряжаться IDispoable ресурсов, таких как соединения SQL и команды, обернув их в using заявлений. Кроме того, убедитесь, что вы используете подготовленные заявления или ваш код уязвим для атак внедрения SQL и база данных может быть разрушена очень быстро (в мгновение ока):

string connString = "Server=localhost;Database=request;Uid=root;Pwd=;"; 

using (MySqlConnection mcon = new MySqlConnection(connString)) 
using (MySqlCommand cmd = mcon.CreateCommand()) 
{ 
    mcon.Open(); 
    cmd.CommandText = "SELECT * FROM requesttcw"; 
    using (MySqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      Console.WriteLine(reader["ID"]); 
      Console.WriteLine(reader["ClanName"]); 
      Console.WriteLine(reader["Date"]); 
      Console.WriteLine(reader["Type"]); 
      Console.WriteLine(reader["Rules"]); 
     } 
    } 
} 

using (MySqlConnection mcon = new MySqlConnection(connString)) 
using (MySqlCommand cmd = mcon.CreateCommand()) 
{ 
    mcon.Open(); 
    cmd.CommandText = "INSERT INTO requesttcw (ClanName, Date, Type, Rules) VALUES (@ClanName, @Date, @Type, @Rules)"; 
    cmd.Parameters.AddWithValue("@ClanName", textBox1.Text); 

    // Warning if the Date column in your database is of type DateTime 
    // you need to parse the value first, like this: 
    // cmd.Parameters.AddWithValue("@Date", Date.Parse(textBox2.Text)); 
    cmd.Parameters.AddWithValue("@Date", textBox2.Text); 
    cmd.Parameters.AddWithValue("@Type", textBox3.Text); 
    cmd.Parameters.AddWithValue("@Rules", richTextBox1.Text); 

    cmd.ExecuteNonQuery(); 
} 

Что касается обработки исключений, то, Я опустил его в своем примере, но вы могли бы, очевидно, обернуть операторы using в блоках try/catch.

+0

Дарин Димитров благодарит человека! Это исправило все !!!!! Я провел целый день, пытаясь понять это, но ты просто помог мне в этом! : D – DamageDz

+0

@DamageDz, отлично, я рад, что смогу помочь. Если этот пост был полезен для вас, пожалуйста, рассмотрите [отметьте его как ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work), нажав на галочку рядом с Это. –

+0

@vucetica, ADO.NET управляет пулом соединений. Таким образом, второй блок 'using' ** не открывает новое соединение ** в базе данных. Он просто рисует существующее соединение из [пула соединений] (http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-connection-pooling.html). В конце используемого оператора соединение не закрывается, но оно возвращается в пул соединений для повторного использования. Что касается вашего второго замечания, я предпочитаю разделить проблемы в своей заявке. Эти двое, как правило, вступают в 2 совершенно разных метода, которые впоследствии могут быть повторно использованы. –

0

В переменной connString у вас есть ID =; после User ID = root.

0

В вашей строке соединения указано соединение между вашим приложением и сервером MySQL. Ошибка, которую вы получаете, потому что вы допустили ошибку в своей строке соединения. Я думаю, что следующее подойдет вашим требованиям лучше:

Server=localhost;Database=request;Uid=myUsername;Pwd=myPassword; 
Смежные вопросы