Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止T-SQL语句提交应用程序启动的事务_C#_Sql Server_Tsql_Ado.net - Fatal编程技术网

C# 防止T-SQL语句提交应用程序启动的事务

C# 防止T-SQL语句提交应用程序启动的事务,c#,sql-server,tsql,ado.net,C#,Sql Server,Tsql,Ado.net,我正在编写一个程序,它使用ADO.NET的SqlCommand来执行用户提供的大量T-SQL语句 我的应用程序打开一个事务,在该事务中执行所有语句,以确保如果执行任何语句时出现错误,则全部回滚 我遇到的问题是,在用户提供的SQL中放置不正确的COMMIT(没有匹配的BEGIN TRAN)将提交我最重要的事务,并使我无法回滚 有人知道我如何阻止用户的SQL干扰我的事务,但仍然允许他们开始/提交/回滚自己的嵌套事务吗?您是否可以通过编程方式检查加载到SqlCommand中的每个T-SQL语句中的单词

我正在编写一个程序,它使用ADO.NET的SqlCommand来执行用户提供的大量T-SQL语句

我的应用程序打开一个事务,在该事务中执行所有语句,以确保如果执行任何语句时出现错误,则全部回滚

我遇到的问题是,在用户提供的SQL中放置不正确的COMMIT(没有匹配的BEGIN TRAN)将提交我最重要的事务,并使我无法回滚


有人知道我如何阻止用户的SQL干扰我的事务,但仍然允许他们开始/提交/回滚自己的嵌套事务吗?

您是否可以通过编程方式检查加载到SqlCommand中的每个T-SQL语句中的单词COMMIT,这样,您就可以在运行T-SQL时标记出潜在的问题


可能会将它们归档到某个地方以供手动查看。

您是否可以通过编程方式检查每个加载到SqlCommand中的T-SQL语句,以便在运行该T-SQL时标记出潜在问题


可能会将它们归档到某个地方以供手动查看。

用户的SQL需要更正-如果它的提交(或回滚)位置不正确,那么我会将其归类为需要修复的错误。我不太了解你的具体情况,但我认为这才是你真正需要做的。如果您发现自己正在尝试实施一种变通方法,这时应该开始敲响警钟,因为这只会使系统变得更复杂/更难维护。

需要纠正用户的SQL—如果它错误地放置了提交(或回滚),那么我会将其归类为需要修复的错误。我不太了解你的具体情况,但我认为这才是你真正需要做的。如果您发现自己正在尝试实施一种变通方法,那么这时就应该开始敲响警钟,因为这只会使系统变得更复杂/更难维护。

您可以将SqlCommand登记到一个新的应用程序中。不能使用数据库中的COMMIT语句提交这些。请参阅Connection对象的登记DistributedTransaction方法


分布式事务引入了一类全新的性能和可靠性问题。如果您能像AdaTheDev建议的那样修复T-SQL批处理,那将是一个更好的选择。

您可以在一个新的应用程序中注册SqlCommand。不能使用数据库中的COMMIT语句提交这些。请参阅Connection对象的登记DistributedTransaction方法


分布式事务引入了一类全新的性能和可靠性问题。如果您可以像AdaTheDev建议的那样修复T-SQL批处理,这将是一个更好的选择。

这是我最初的想法,但解析SQL并仍然允许嵌套事务并非易事。这是我最初的想法,但解析SQL并仍然允许嵌套事务并非易事。总的来说,我完全同意这一点-是的,用户SQL才是真正的问题,也是一个问题解决办法并不理想。不幸的是,在我的场景中,我需要能够容忍这些错误。在理想情况下,我会在执行SQL之前解析用户SQL(根据@kevchadders的回答),并检查这些问题,但我觉得这太难了。@Robert Wood-我想你需要研究一下Andomar的建议。解析SQL可能是一堆蠕虫。我唯一建议的另一个选择是像现在这样继续,并注销那些引起问题的。我完全同意这一点-是的,用户SQL才是真正的问题,解决办法并不理想。不幸的是,在我的场景中,我需要能够容忍这些错误。在理想情况下,我会在执行SQL之前解析用户SQL(根据@kevchadders的回答),并检查这些问题,但我觉得这太难了。@Robert Wood-我想你需要研究一下Andomar的建议。解析SQL可能是一堆蠕虫。我唯一建议的另一个选择是继续你现在所做的,并注销那些引起问题的。