Ничего не было сохранено в базе данных - PullRequest
1 голос
/ 27 июня 2011

Я новичок в Visual Studio 2010 и MySQL. Я создаю форму, где пользователь будет вводить информацию для добавления в базу данных. Никаких ошибок не возникает, однако, когда я проверяю MySQL, введенные данные не были сохранены в моей базе данных. Может кто-нибудь проверить мой код на наличие ошибок или отсутствия правильности? Пожалуйста помоги. Спасибо.

Вот мой код:

private void button_adduser_Click(object sender, EventArgs e)
    {
        string MyConString = "SERVER=localhost;" + "DATABASE=timekeeping;" + "UID=root;" + "PASSWORD=admin;";
        MySqlConnection connection = new MySqlConnection(MyConString);
        MySqlCommand command = connection.CreateCommand();
        command.Connection = connection;

        command.CommandText = "insert into users(addfname, addmname, addlname, addposition, addcontact, addemail, addbday, addusername, addpassword) values(@fname, @mname, @lname, @position, @contactnumber, @emailadd, @birthday, @username, @password)";
        command.Parameters.Add(new MySqlParameter("@fname", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@mname", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@lname", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@position", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@contactnumber", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@emailadd", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@birthday", SqlDbType.Date));
        command.Parameters.Add(new MySqlParameter("@username", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@password", SqlDbType.VarChar));
        command.Parameters["@fname"].Value = addfname.Text.ToLower();
        command.Parameters["@mname"].Value = addmname.Text.ToLower();
        command.Parameters["@lname"].Value = addlname.Text.ToLower();
        command.Parameters["@position"].Value = addposition.Text;
        command.Parameters["@contactnumber"].Value = addcontact.Text;
        command.Parameters["@emailadd"].Value = addemail.Text;
        command.Parameters["@birthday"].Value = addbday.Text;
        command.Parameters["@username"].Value = addusername.Text;
        command.Parameters["@password"].Value = addpassword.Text;
        connection.Open();

        MessageBox.Show("Data Saved");

    }

Ответы [ 6 ]

4 голосов
/ 27 июня 2011

Попробуйте использовать command.ExecuteNonQuery(). Также обратите внимание, что вы можете использовать command.ExecuteScalar(), если вы возвращаете одно значение (например, идентификатор новой вставленной записи). Вы также должны использовать оператор using, чтобы обеспечить вызов методов Dispose для команды и соединения. Весь код должен выглядеть примерно так:

using(MySqlConnection connection = new MySqlConnection(MyConString))
{
    connection.Open();
    using(MySqlCommand command = connection.CreateCommand())
    {
        command.CommandText = "insert into users(addfname, addmname, addlname, addposition, addcontact, addemail, addbday, addusername, addpassword) values(@fname, @mname, @lname, @position, @contactnumber, @emailadd, @birthday, @username, @password)";
        command.Parameters.Add(new MySqlParameter("@fname", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@mname", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@lname", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@position", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@contactnumber", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@emailadd", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@birthday", SqlDbType.Date));
        command.Parameters.Add(new MySqlParameter("@username", SqlDbType.VarChar));
        command.Parameters.Add(new MySqlParameter("@password", SqlDbType.VarChar));
        command.Parameters["@fname"].Value = addfname.Text.ToLower();
        command.Parameters["@mname"].Value = addmname.Text.ToLower();
        command.Parameters["@lname"].Value = addlname.Text.ToLower();
        command.Parameters["@position"].Value = addposition.Text;
        command.Parameters["@contactnumber"].Value = addcontact.Text;
        command.Parameters["@emailadd"].Value = addemail.Text;
        command.Parameters["@birthday"].Value = addbday.Text;
        command.Parameters["@username"].Value = addusername.Text;
        command.Parameters["@password"].Value = addpassword.Text;

        //Execute command
        command.ExecuteNonQuery();
    }
}
2 голосов
/ 27 июня 2011

Вы не выполнили свою команду. Попробуйте:

connection.Open();
command.ExecuteNonQuery();
0 голосов
/ 27 июня 2011

Возможно, вам не хватает этого кода:

connection.Open();
command.ExecuteNonQuery();
connection.Close(); 
0 голосов
/ 27 июня 2011

вам нужно выполнить команду для сохранения, вы только открываете соединение.

0 голосов
/ 27 июня 2011

Вы забыли добавить command.ExecuteNonQuery(); после открытия соединения.

0 голосов
/ 27 июня 2011

Вы добавили параметры, открыли соединение, но забыли выполнить команду.Поставьте

command.ExecuteNonQuery();

перед окном оповещения.

В качестве дополнительного бонуса вы, вероятно, захотите заключить вещи в оператор использования.Это обеспечит правильную утилизацию ваших объектов и закрытие вашего соединения;

using (MySqlConnection connection = new MySqlConnection(MyConString))
{
    using (MySqlCommand command = connection.CreateCommand())
    {
       command.Connection = connection;
       /// the rest of your database code goes here
       command.ExecuteNonQuery();
}

MessageBox.Show("Data Saved");
...