2016-03-21 76 views
2

我尝试更新我的数据库中的一行使用C#数据太长在行1

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'; 

称为gestion_concour和我得到这个 Error 我试图在woekbench中传递查询,它工作得很好。 那么什么是概率 (代码是VARCHAR(10))

+2

'mcmd.Parameters.AddWithValue( “@ N_Code”,input_Des);'看起来错 – wimh

+0

我想,你的问题可能是固定的ConcourList.Text – Steve

+0

@Wimmel对不起只是frapp错误 –

回答

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");

希望它能帮助。 :)

1

那么,你正在使用ExecuteReader。如果你想给exec一个更新命令,你应该使用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(); 
+0

正确但这很难修复问题 – Steve

+0

如何改变它?对不起,我是新的 –

+0

你是对的@Steve ..编辑 – Pikoh

1

它看起来像你使用了错误的变量你参数。尝试

mcmd.Parameters.AddWithValue("@N_Code", input_Code); 

,而不是

mcmd.Parameters.AddWithValue("@N_Code", input_Des); 
+0

仍然是相同的问题 –

+0

@IlyesGHOMRANI'input_Code'的值是什么? – user1666620

+0

input_code = CAEPST –