停止SQL存储过程执行两次
我对仅从一个调用执行两次的存储过程有一个问题。我这样称呼它:停止SQL存储过程执行两次,sql,asp.net-mvc,stored-procedures,model-view-controller,Sql,Asp.net Mvc,Stored Procedures,Model View Controller,我对仅从一个调用执行两次的存储过程有一个问题。我这样称呼它: using (SqlConnection conn = new SqlConnection(DatabaseConnection(read_intent: false))) { SqlCommand cmd = new SqlCommand("prc.name", conn); cmd.Parameters.AddWithValue("@test", ob
using (SqlConnection conn = new SqlConnection(DatabaseConnection(read_intent: false)))
{
SqlCommand cmd = new SqlCommand("prc.name", conn);
cmd.Parameters.AddWithValue("@test", object.test);
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
和我的存储过程:
ALTER procedure [prc.name]
@test int,
as
begin try
set nocount on
update tbl.name set
value_count = (value_count + 1),
_test = @test
end try
问题是当我检查值_count时,它并没有增加1,而是增加了2,因为调用了一次过程。我在执行过程后抛出异常写入,以确保我不会从其他地方调用它。这方面的帮助,因为我从头到尾查看了整个过程20次,对于这个问题我没有任何线索。是否有可能另一个应用程序正在调用相同的存储过程?仅供参考,您不需要在此处的连接上显式调用
Close
,使用
会为您解决这一问题。您的过程/表名中是否实际包含
s?这是你的实际程序吗?@James不可能从其他地方调用,我会搜索所有可能的调用。我同意结束,但这不是重点,这只是一次尝试precaution@VladimirAbazarov我的意思是从另一个应用程序,而不是在你的应用程序。如果您的应用程序肯定没有两次调用它,那么很明显,它是在外部调用的,或者是SP本身的问题(看起来没问题)。另外,这是一种不必要的预防措施,因为使用几乎可以保证清除连接。我怀疑存储过程只被调用一次,但“复杂逻辑”实际上做的比您想象的要多(从而产生意外的结果)您当前将其描述为被调用两次的存储过程)