如何知道sql Update语句是成功执行还是失败?
我使用sql server 2005和C#asp.net。
我可以在C#中获取成功或失败的信息而不在旧的sql语句中添加一些sql代码吗?
答案 0 :(得分:11)
您可以使用@@ROWCOUNT来获取上次查询所影响的行数。例如,这可用于确定您的WHERE
子句是否实际匹配了某些内容。
UPDATE mytable SET
field = 'SomeValue'
WHERE
id = 1234
IF @@ROWCOUNT = 0
BEGIN
-- No row with id=1234
END
答案 1 :(得分:11)
您可以使用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();
}
答案 2 :(得分:1)
'失败'是什么意思?
如果失败则表示生成了错误 - SQL语法,约束或FK违规 - 则TRY / CATCH,RAISEERROR等是选项。
或者,如果失败则意味着没有更新行,那么ExecuteNonQuery的返回值将为您提供行数,如果您没有在存储过程中禁止rowcount。
答案 3 :(得分:0)
使用TRY / CATCH块和RAISERROR发送消息。