2010-06-03 200 views
3

如何知道sql update語句是否成功執行或失敗?如何知道sql update語句是否成功執行或失敗?

我使用sql server 2005和C#asp.net。

我可以在C#中獲得成功或失敗的信息,而無需在舊的sql語句中添加一些sql代碼?

+0

在管理工作室?使用C#,Delphi,...? – 2010-06-03 06:22:13

+0

你能更具體嗎?你在哪裏執行更新?它是一個應用程序或只是管理工作室或什麼?如果它是一個應用程序,比什麼樣的?你用什麼語言? 但一般來說,如果失敗,你會得到一個錯誤,所以你應該有錯誤處理程序:) – hgulyan 2010-06-03 06:22:46

回答

8

您可以使用ExecuteNonQuery的返回值來檢查更新是否成功。

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
     SqlCommand cmd = new SqlCommand("sp_updateData", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     SqlParameter p1 = new SqlParameter("@id", SqlDbType.Int); 
     p1.Value = 1; 
     p1.Direction = ParameterDirection.Input; 

     SqlParameter p2 = new SqlParameter("@name", SqlDbType.VarChar,50); 
     p2.Value = "sls"; 
     p2.Direction = ParameterDirection.Input; 

     cmd.Parameters.Add(p1); 
     cmd.Parameters.Add(p2); 

     try 
     { 
      con.Open(); 
      //count will be the number of rows updated. will be zero if no rows updated. 
      int count = cmd.ExecuteNonQuery(); 
      if (count > 0) 
      { 
       Console.WriteLine("Update Success!!!"); 
      } 
      else 
      { 
       Console.WriteLine("No Updates!!!"); 
      } 
      Console.ReadLine(); 

     } 
     catch (SqlException ex) 
     { 
      Console.WriteLine("Update Failed coz.. " + ex.Message); 
     } 
     finally 
     { 
      con.Close(); 
     } 
8

您可以使用@@ROWCOUNT獲取受上一查詢的行數。例如,這可以用來決定你的WHERE子句是否實際匹配了某些東西。

UPDATE mytable SET 
    field = 'SomeValue' 
WHERE 
    id = 1234 

IF @@ROWCOUNT = 0 
BEGIN 
    -- No row with id=1234 
END 
1

'失敗'是什麼意思?

如果失敗,則表示生成錯誤 - SQL語法,約束或FK違例 - 然後TRY/CATCH,RAISEERROR等是選項。

或者,如果失敗,則意味着沒有行被更新,則ExecuteNonQuery的返回值將爲您提供行計數,如果您不在存儲過程中抑制rowcount。