2010-06-03 198 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。