我尝试使用c#
更新数据库中名为gestion_concour的行private void Modifier_Concour_Click(object sender, RoutedEventArgs e)
{
string input_Code = Code.Text;
string input_Des = Des.Text;
string input_Spe = Spe.Text;
string selected = ConcourList.Text;
MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
builder.Server = "127.0.0.1";
builder.UserID = "root";
builder.Password = "root";
builder.Database = "gestion_concour";
MySqlConnection connection = new MySqlConnection(builder.ToString());
connection.Open();
string query = "update gestion_concour.concour set Code = @N_Code, Designation = @N_Des, Specialite = @N_Spe where Code = @A_Code";
MySqlCommand mcmd = new MySqlCommand(query, connection);
mcmd.Parameters.AddWithValue("@A_Code", selected);
mcmd.Parameters.AddWithValue("@N_Code", input_Code);
mcmd.Parameters.AddWithValue("@N_Des", input_Des);
mcmd.Parameters.AddWithValue("@N_Spe", input_Spe);
MySqlDataReader myReader;
try
{
myReader = mcmd.ExecuteReader();
while (myReader.Read())
{
}
Code.Clear();
Des.Clear();
Spe.Clear();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
connection.Close();
Fill_Combo();
fill_grid();
}
我填充文本框,以便查询类似
update gestion_concour.concour set Code = 'CAEPST', Designation = 'Concours Accées a EPST', Specialite = 'EPST' where Code = '3';
我得到了这个 Error 我试图在woekbench中传递查询,它工作得很好。 那么问题是什么? (代码是VARCHAR(10))
答案 0 :(得分:1)
好吧,你正在使用ExecuteReader
。如果要执行更新命令,则应使用ExecuteNonQuery
。因此它将是:
try
{
int i = mcmd.ExecuteNonQuery();
}
这一行似乎也错了:
mcmd.Parameters.AddWithValue("@N_Code", input_Des);
mcmd.Parameters.AddWithValue("@N_Des", input_Des);
似乎您正在添加名称而不是代码。可能它应该是:
mcmd.Parameters.AddWithValue("@N_Code", input_Code );
改变这一点也不会受到伤害,只是为了确保没有造成问题的空间:
string input_Code = Code.Text.Trim();
string input_Des = Des.Text.Trim();
string input_Spe = Spe.Text.Trim();
string selected = ConcourList.Text.Trim();
答案 1 :(得分:1)
看起来你正在为你的参数使用错误的变量。尝试
mcmd.Parameters.AddWithValue("@N_Code", input_Code );
而不是
mcmd.Parameters.AddWithValue("@N_Code", input_Des);
答案 2 :(得分:1)
我可能会做这些事情来弄清楚出了什么问题 -
Code
列真的是varchar(10),请检查数据库。input_Code
的值,如果它真的是“CAEPST”。另一个选择是,我们可以使用实际的文本框作为您的值。像这样 -
mcmd.Parameters.AddWithValue("@N_Code", Code.Text.ToString());
或者我们也可以这样做,只是为了看看它是否真的通过 -
mcmd.Parameters.AddWithValue("@N_Code", "CAEPST");
希望它有所帮助。 :)