2016-03-21 32 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 –