我需要在Windows应用程序中执行3个操作作为事务。这些不是SQL操作,否则我会使用TransactionScope。第一项操作是记录一些值在数据库中,第二项是将电子邮件移动到pst中,第三项是将电子邮件移动到另一个邮箱中。如果其中任何操作失败,我希望其他操作回滚到先前的状态。是否有任何方法可以实现这个事务。
.NET操作的交易
原标题:
最佳回答
你可以编写自己的ResourceManager,并使用System.Transactions来帮助你处理事务。
将此翻译成中文:http://www.codeguru.com/csharp/.net/net_data/sortinganditerating/article.php/c10993__1/ http://www.codeguru.com/csharp/.net/net_data/sortinganditerating/article.php/c10993__1/
取决于复杂度和您需要的频率,这可能是一个过于复杂的解决方案。
问题回答
除非您的电子邮件后端支持DTC,否则您无法使用TransactionScope
;请注意,TransactionScope
不仅限于SQL提供程序;一些中间件工具支持它,甚至为.NET对象提供了基于TransactionScope
的支持(不是任何对象—只有那些使用库的基类/属性包等编写的对象)。
根据现状,您可能需要手动回滚。
Doing a transaction "by the book" is easy if every single encompassed actions have proper transactional support, otherwise it would be a nightmare trying to support (commit/rollback) each of them individually in their own DIY ways :)
As Marc pointed out, doing it manually would be the simpler choice as it stands.
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding