1

我一直在研究在我目前正在编程的环境中使用数据库事务(带有 WebMatrix 的 C#.Net WebPages,使用 SQL Server CE),并且已经阅读了很多关于该主题的内容。

起初,我正在研究这个问题,因为我觉得这对我的项目来说是 100% 必要的,不过,现在我意识到默认的“Last-in-wins”并发策略适用于我有点简单的 CRUD 系统。

现在,我没有足够的知识来真正说我 100% 需要这个,但如果可能的话,我想将所有我必须多次访问数据库的语句集中到一个语句,以最大程度地减少必须锁定数据库的次数(同样,我不确定这是否值得担心,但感觉就像单个语句会更清洁,更高效,甚至可能更少容易出错)。

在我的服务器端代码中,我有一些逻辑分支,根据是否可以重用 ID 号,需要为我需要添加的每一行对数据库执行一个INSERT INTO或一个语句。UPDATE问题是除了事务之外,没有其他方法可以将多个UPDATE和/或INSERT语句组合成一个可通信的语句。

最后,在我自己查看环境的事务语法时,我遇到了许多描述事务如何工作的页面,但没有提供任何语法示例。我确实找到了这个页面...:

http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlcecommand.transaction(v=vs.100).aspx

...实际上是针对我的环境和服务器端代码,但是,在我输入时,所使用的语法并没有显示在 Intellisence 中,这一直是语法错误的迹象。不过,在这个页面中,我可以很容易地看到我应该如何合理地进行设置(使用“try”、“catch”甚至“finally”),这对我来说非常有意义。我的问题是我找不到任何关于如何实际编译事务的给定环境的语法。

有没有人可以提供一个示例,说明在我的带有 WebMatrix 的 C#.Net WebPages 中,使用 SQL Server CE 环境编译具有多个INSERT和语句的数据库事务所需的语法?UPDATE

4

2 回答 2

1

事务不提供减少对数据库执行的命令数量的机制。您可以通过批处理语句来做到这一点 - 使用分号作为语句分隔符:

"INSERT INTO table1 VALUES (x,y,z); INSERT INTO table2 VALUES(1,2,3)"

然后您可以一次性执行该批次:

command.ExecuteNonQuery(sql);

这会导致一次调用数据库,从而实现您的目标。

然而:

SQL Compact 不支持批处理语句。所以你不能使用它们。您必须依次执行每个语句。

在执行插入时,您真的不需要关心数据库锁定。这需要几分之一纳秒,数据库本身会处理或排队请求,以便用户不受影响。

于 2013-11-02T11:00:00.610 回答
0

您是否将 System.Transactions dll 添加到您的引用中?当然,如果您使用的是 TransactionScope,但如果您使用的是 IDbTransaction,您应该只使用 System.Data 添加;

于 2013-10-30T14:02:15.543 回答