C# C确认表行已从数据库中删除
我已经编写了一个方法,该方法将尝试根据主键id从db表中删除一行。我遇到的问题是,即使记录已被删除/或不存在,try块始终返回SuccessC# C确认表行已从数据库中删除,c#,sql,C#,Sql,我已经编写了一个方法,该方法将尝试根据主键id从db表中删除一行。我遇到的问题是,即使记录已被删除/或不存在,try块始终返回Success public string delete_visit(int id) { string deleteResponse = null; string cnn = ConfigurationManager.ConnectionStrings[connname].ConnectionString;
public string delete_visit(int id)
{
string deleteResponse = null;
string cnn = ConfigurationManager.ConnectionStrings[connname].ConnectionString;
using (SqlConnection connection = new SqlConnection(cnn))
{
string SQL = string.Empty;
SQL = "DELETE FROM [" + dbname + "].[dbo].[" + tbname + "] WHERE VisitorNumber = @IDNumber ";
using (SqlCommand command = new SqlCommand(SQL, connection))
{
command.Parameters.Add("@IDNumber", SqlDbType.Int);
command.Parameters["@IDNumber"].Value = id;
try
{
connection.Open();
command.ExecuteNonQuery();
deleteResponse = "Success";
}
catch (Exception ex)
{
deleteResponse = "There was a problem deleting the visit from the database. Error message: " + ex.Message;
}
}
}
return deleteResponse;
}
我想知道这场争吵是否受到影响。我可以在SQL Server Management Studio中这样做:
DELETE FROM Visits
WHERE VisitorNumber=88;
IF @@ROWCOUNT = 0
PRINT 'Warning: No rows were updated';
所以我想知道如何将@@ROWCOUNT位插入到我的c中,这样我就可以知道行是否被删除了
谢谢,这表明有多少行受到影响
因此:
问题是这个数字可能会受到查询实际功能的影响。执行触发器或调用存储过程可能会影响输出,从而改变受影响的行数。如果确实需要,那么首先执行一个查询,检查具有给定ID的记录是否存在。从VisitorNumber=88的访问中删除;选择@@ROWCOUNT并签入您的C代码返回值考虑使用存储过程-以这种方式编写SQL查询很难区分好坏。如果SQL代码发生更改,您还需要重建和重新部署解决方案。是的,如果你只是拼凑一些东西,这不是什么大不了的事,但是如果这是一个企业解决方案被推到数百台服务器上,这是一个大不了的事。谢谢@CodeCaster,这太完美了,这是一个小规模的应用程序,所以这就成功了。
int rowsAffected = command.ExecuteNonQuery();
if (rowsAffected == 0)
{
deleteResponse = "No rows affected";
}