#c# #mysql #.net #database-connection
Вопрос:
Здесь я пытаюсь обновить детали в своей базе данных mysql, но она не обновляет детали, а показывает, что сделано. После этого, если я попытаюсь обновить то же самое, он покажет, что параметр «@Уникальный идентификатор » уже объявлен.
Ниже приведен раздел моей кнопки обновления приложения, которое я создаю.
private void btn_Update_Click(object sender, EventArgs e)
{
sqlConn.ConnectionString = "Server = " server ";" "user Id = " username ";" "password = " password ";" "database = " database;
try
{
MySqlCommand sqlcmd = new MySqlCommand();
sqlConn.Open();
sqlCmd.Connection = sqlConn;
sqlCmd.CommandText = "Update `monthly_expense`.`exp_mast` set `Unique ID`= '@Unique ID', `First Name`= '@First Name',`Last Name`= '@Last Name',`Address`= '@Address',`Contact Number`= '@Contact Number',`Alternate Contact Number`= '@Alt Number',`Gender`= '@gen' Where(`Unique ID`= '@Unique ID')";
if (rb_male.Checked == true)
{
gen = "Male";
}
else
{
gen = "Female";
}
sqlCmd.CommandType = CommandType.Text;
sqlCmd.Parameters.AddWithValue("@Unique ID", txt_id.Text);
sqlCmd.Parameters.AddWithValue("@First Name", txt_fstn.Text);
sqlCmd.Parameters.AddWithValue("@Last Name", txt_lstn.Text);
sqlCmd.Parameters.AddWithValue("@Address", txt_loc.Text);
sqlCmd.Parameters.AddWithValue("@Contact Number", txt_cont.Text);
sqlCmd.Parameters.AddWithValue("@Alt Number", txt_altcont.Text);
sqlCmd.Parameters.AddWithValue("@gen", gen);
sqlCmd.ExecuteNonQuery();
sqlConn.Close();
MessageBox.Show("Done");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Комментарии:
1.
MySqlCommand sqlcmd = new MySqlCommand();
объявляетsqlcmd
(все в нижнем регистре), тогда как все остальное в методе используетsqlCmd
(прописные буквы C). Это наводит меня на мысль, что вы объявилиsqlCmd
в другом месте (где — то, что сохраняется между вызовами этого раздела кода-возможно, в качестве переменной поля в классе?) и поэтому добавляете в него параметры снова и снова и снова. В любом случае, VTC как опечатка.2.
MySqlCommand sqlcmd = new MySqlCommand();
также было объявлено во всем мире3. Да, но
sqlcmd
inbtn_Update_Click
имеет приоритет над «глобальным»sqlcmd
.4. В случае, если мой предыдущий комментарий был неясен: C# чувствителен к регистру, поэтому
sqlcmd
иsqlCmd
в кодеbtn_Update_Click
не ссылайтесь на одну и ту же переменную.5. Ваш код выглядит правильно, и выполнение также не вызывает никаких ошибок… так что это, должно быть, проблема с данными… возможно, вам захочется проверить правильность введенных значений
text_id
… кроме того, вы можете запустить тот же запрос в workbench и посмотреть, обновит ли он значение в таблице. Все остальные запросы на обновление/вставку в приложении работают нормально?