2016-09-18 104 views
-1

美好的一天!我需要幫助,請.. 這是我的C#代碼,每當我執行它什麼也沒有發生任何錯誤或暗示MySql更新不起作用

string myConnection = " datasource=localhost;port=3306;username=root;password=wolf"; 
     string Query = " UPDATE bikerentaldb.tblbikes SET status='Rented',renteddate=NOW(),assignedreturndate='" + txtToBeReturned.Text + "' WHERE bikeID='" + txtBikeIdRent.Text + "'"; 
     MySqlConnection myConn = new MySqlConnection(myConnection); 
     MySqlCommand SelectCommand = new MySqlCommand(Query, myConn); 
     myConn.Open(); 
     MessageBox.Show("Data Saved"); 
     myConn.Close(); 

我不知道爲什麼Upate將無法正常工作,但是當我MySql上

執行該代碼
UPDATE bikerentaldb.tblbikes SET status='Rented',renteddate=NOW(),assignedreturndate=NOW() WHERE bikeID='2'; 

它工作得很好有人可以幫助我嗎?

+0

考慮重命名命令變量,如果它實際上沒有任何選擇後寫。 – Crowcoder

回答

2

應執行一個命令來執行任何操作。在打開連接後,您的代碼會錯過對SelectCommand.ExecuteNonQuery()行的調用。然而,在修復這個微不足道的錯誤之後,您可能會遇到其他問題,這些值會連接起來形成您的命令文本。如果用戶輸入無效日期怎麼辦?你有沒有聽說過Sql Injection hacks

這是怎麼了你的代碼添加驗證你的輸入和參數值發送到你的數據庫

int bikeID = 0; 
if(!Int32.TryParse(txtBikeIdRent.Text, out bikeID) 
{ 
    MessageBox.Show("Invalid number"); 
    return; 
} 
DateTime returnDate; 
if(!DateTime.TryParse(txtToBeReturned.Text , out returnDate) 
{ 
    MessageBox.Show("Invalid date"); 
    return; 
} 
string myConnection = "....."; 
string Query = @"UPDATE bikerentaldb.tblbikes 
    SET status='Rented', renteddate=NOW(), 
     [email protected] 
     WHERE [email protected]"; 
using(MySqlConnection myConn = new MySqlConnection(myConnection)) 
using(MySqlCommand cmd = new MySqlCommand(Query, myConn)) 
{ 
    myConn.Open(); 
    cmd.Parameters.Add("@date", MySqlDbType.Date).Value = returnDate; 
    cmd.Parameters.Add("@id", MySqlDbType.Int32).Value = bikeID; 
    int rowUpdated = cmd.ExecuteNonQuery(); 
    if(rowUpdated > 0) 
     MessageBox.Show("Record updated"); 
    else 
     MessageBox.Show("No record match"); 
}