2012-03-07 74 views
3

如何知道以下INSERT查詢是否成功?如何知道查詢是否成功?

MySqlConnection connection = new MySqlConnection(ConnectionString); 
connection.Open(); 
MySqlCommand command = new MySqlCommand("INSERT INTO People (PersonName, dateAdded) VALUES (?name, NOW())", connection); 
command.Parameters.Add(new MySqlParameter("name", Name)); 
MySqlDataReader Reader = command.ExecuteReader(); 

我試圖運行Reader.Read()但只返回一個空字符串。謝謝。

回答

9

您改用ExecuteNonQuery

int affectedRows = command.ExecuteNonQuery(); 
if (affectedRows <= 0) 
{ 
    // Houston, we have a problem. 
} 

請記住,如果你對數據觸發器,它可能不反映實際的行數你試圖INSERT

您可以使用ExecuteNonQuery執行任何類型的數據庫操作,但是返回的任何結果集都將不可用。調用存儲過程中使用的任何輸出參數都將填充數據,並且可以在執行完成後檢索。對於UPDATEINSERTDELETE語句,返回值是該命令影響的行數。對於所有其他類型的語句,返回值爲-1

但是,一般來說,如果您的查詢遇到錯誤,您將收到MySqlException

+0

謝謝sixlettervariables! – dotancohen 2012-03-07 19:18:47

2

如果失敗,將拋出異常。異常對象通常會包含有關出錯的信息(例如「主鍵違規」等)。

此外,使用ExecuteNonQuery進行INSERT,UPDATE或DELETE。返回的值將包含受影響的行數。

+0

謝謝Branko。 – dotancohen 2012-03-07 19:19:03

3

只有在查詢數據庫時才使用SqlDataReader,SqlDataReader是一個快速向前指針,因此只建議用於查詢,使用SqlCommand的ExecuteNonQuery()方法,例如作爲下一個代碼:

using (SqlConnection conn = new SqlConnection("[QueryString]")) { 
      using (SqlCommand cmd = new SqlCommand("SQL Command",conn)) { 
       //here you return the number of affected rows 
       int a = cmd.ExecuteNonQuery();      
      } 
     } 

我希望,這可以幫助你。

相關問題