第1行的数据太长

时间:2016-03-21 16:21:12

标签: c# mysql

我尝试使用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))

3 个答案:

答案 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)

我可能会做这些事情来弄清楚出了什么问题 -

  1. 如果Code列真的是varchar(10),请检查数据库。
  2. 如果是,则尝试检查字符串input_Code的值,如果它真的是“CAEPST”。
  3. 如果检查,请确保在插入之前修剪文本框。
  4. 您还可以测试只更新列。
  5. 另一个选择是,我们可以使用实际的文本框作为您的值。像这样 - mcmd.Parameters.AddWithValue("@N_Code", Code.Text.ToString());

  6. 或者我们也可以这样做,只是为了看看它是否真的通过 - mcmd.Parameters.AddWithValue("@N_Code", "CAEPST");

  7. 希望它有所帮助。 :)