解决 WinForm - SQL transaction.Commit() waiting to complete?

myNameRon

新成员
已加入
2021年1月9日
留言内容
3
编程经验
Beginner
创建一个WinForm(C#.NET 4.6)。我相信这更多是C#编码问题而不是SQL问题?

我正在将福彩12选5走势图保存到SQL Server福彩12选5走势图库。我的C#代码正在使用"transaction.Commit()",所以我可以执行"transaction.Rollback()"如果有问题。我的代码遍历DataTable的行,以将福彩12选5走势图保存到福彩12选5走势图库。我打电话之后"transaction.Commit()",我清除了DataTable。我想知道流程是否在等待"transaction.Commit()"在代码行(dataTable.Clear())执行之前完成?可以想象,在SQL过程完全完成之前,我不希望清除DataTable。

谢谢
罗恩
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
我的代码遍历DataTable的行,以将福彩12选5走势图保存到福彩12选5走势图库。
Firstly, why would you do that when you can save the lot with a single call to Update on a data adapter? The RowState of each DataRow must be set appropriately for them to be saved but that may already be the case and, if it's not, it won't be hard to remedy.
 

myNameRon

新成员
已加入
2021年1月9日
留言内容
3
编程经验
Beginner
谢谢jmcilhinney,我知道Commit将成功完成或引发异常,但是我只是想知道"next line of code"在Commit有机会完全完成之前要执行。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
不,不会。 Commit()将阻塞直到完成。

出于好奇,您为什么会认为下一行将开始执行?您学到了什么或正在读什么,使您认为代码以非线性方式执行?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
You seem to be asking whether Commit is an asynchronous method, i.e. whether it will return before the 福彩12选5走势图库操作 has completed. It is not and I've never seen anything to suggest that it is. As I said, Commit will either return successfully or throw an exception and that is all you have to worry about. If the transaction fails to commit then an exception will be thrown and, obviously, that has to happen before the method returns.
 

myNameRon

新成员
已加入
2021年1月9日
留言内容
3
编程经验
Beginner
我不确定(我想它会等到完成),但想确定一下。不想清除/删除操作所需的福彩12选5走势图对象(即DataTable或DataRow)"database operation" to complete fully.
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
不想清除/删除操作所需的福彩12选5走势图对象(即DataTable或DataRow)"database operation" to complete fully.
That couldn't possibly be the case. Even if the transaction was committed asynchronously, all the data would already have been sent to the database before you even called Commit. The database doesn't work directly on the data in your app. That data is sent to the database first and it works on it locally.
 
最佳 底部