c# - SQL Server 2008 中的事务问题

标签 c# tsql sql-server-2008 ado.net transactions

我正在使用 SQL Server 2008 Enterprise。并使用 ADO.Net + C# + .Net 3.5 + ASP.Net 作为客户端访问数据库。当我访问 SQL Server 2008 表时,我总是从我的 C# + ADO.Net 代码调用存储过程。

我的问题是,如果我的客户端 C# + ADO.Net 代码没有任何事务控制(我的意思是开始/结束事务),而且我也没有任何事务控制(我的意思是开始/结束事务)在sql存储过程代码中。那么我的问题是,每个 Insert/Delete/Update/Select 语句都将充当单个事务?那是对的吗?比如下面的store过程中,delete/insert/select会作为3个单事务?

create PROCEDURE [dbo].[FooProc]    
(  
 @Param1 int 
 ,@Param2 int  
 ,@Param3 int  
)    
AS    

DELETE FooTable WHERE  Param1 = @Param1     

INSERT INTO FooTable    
 (  
 Param1  
 ,Param2  
 ,Param3  
  )    
 VALUES    
 (  
 @Param1  
 ,@Param2  
 ,@Param3  
  )    

DECLARE @ID bigint    
 SET @ID = ISNULL(@@Identity,-1)    
 IF @ID > 0    
 BEGIN    
      SELECT IdentityStr FROM FooTable WHERE ID = @ID 
 END 

最佳答案

Then my question is, each single Insert/Delete/Update/Select statement will act as a single transaction?

是的,没有明确的事务控制,每条SQL语句都会被包裹在自己的事务中。单个语句保证作为一个整体执行或作为一个整体失败。

单个语句将在当前 transaction isolation level 下运行: 通常 read committed。因此它不会从其他语句中读取未提交的更改,但它可能会遭受不可重复读取或幻像值的困扰。

关于c# - SQL Server 2008 中的事务问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3075110/

相关文章:

c# - 根据文本框的值动态更改标签的值 c# windows form

c# - 单点触控 : UIPicker as first responder for a UITextbox

c# - 将内部区分联合的实例从 F# 初始化为 C#

c# - 即使指定了 TimeSpan.MaxValue 过期,HashSet 也会从 Redis 缓存中删除

sql - 将最小日期和相应的金额返回到该不同的 ID

sql - 使用 UDF 拆分值对和创建表

sql - 游标内的 SQL 更新缓慢

sql-server - 每小时自动恢复数据库的最佳方法

sql-server-2008 - Sql server 数据类型,用于存储正数

sql - 如何确定连续契约(Contract)行中员工工资的增加?