当前位置: 首页 > 编程语言 > C#

C#中的SCOPE_IDENTITY-作用域共享

时间:2023-04-10 22:14:10 C#

C#中的SCOPE_IDENTITY-作用域在SSMSE中查询,这很容易,但在C#中,我使用SqlCommand来执行我的语句。问题是:那里的范围是什么?在一个连接下执行后续命令是否相当于批处理?或者也许每个命令都在不同的范围内,我需要一个事务来使用它?我建议将C#命令和T-SQL“批处理”视为彼此完全分开。将SQLCommand视为您的执行包装器,其中构成批处理的实际定义由T-SQL语言定义和控制。您的会话范围在Connection对象级别维护。您可能会发现以下MSDN论坛帖子很有趣。请注意初始示例如何执行两个单独的SQL命令,但对SCOPE_IDENITY()的第二次调用会看到前一次调用的结果。这是因为当前范围在连接级别可见。SQLCommandWithParametersandScope_Indentity为了完整解释,使用参数不起作用的原因,如后面链接的示例所示,是因为sp_executesql在其自己的范围内执行,因此无法看到连接的范围。[编辑]更多好奇读者的进一步阅读,请在下面找到VB.NET代码,它提供了在单个连接上执行两个单独命令的示例,第二个成功发出SCOPE_IDENTITY()函数。源代码可以在SSIS包Task的SCRIPT组件中执行。您还需要编辑环境的连接详细信息并创建引用的表对象。创建表脚:创建表TestTable(IDintidentity(1,1)primarykeynotnull,SomeNumericDataintnotnull);VB.NET源代码清单:ImportsSystemImportsSystem.DataImportsSystem.MathImportsMicrosoft.SqlServer.Dts.RuntimeImportsSystem.Data.SqlClient.SqlConnectionImportsWindows.Forms.MessageBoxPublicClassScriptMainPublicSubMain()''添加你的此处代码DimoCnnAsNewData.SqlClient.SqlConnectionDimsSQLAsStringDimsSQL2AsStringDimresultOneAsIntegerDimresultTwoAsIntegerDimmessageBoxAsWindows.Forms.MessageBoxresultOne=0resultTwo=0oCnn.ConnectionString="Server=ServerName;数据库=数据库名称;Trusted_Connection=true"sSQL="INSERTINTOTestTable(SomeNumericData)VALUES(666)"sSQL2="SELECTSCOPE_IDENTITY()"DimoCmdAsSqlClient.SqlCommand=NewSqlClient.SqlCommand(sSQL,oCnn)DimoCmd2AsSqlClient.SqlCommand=NewSqlClient.SqlCommand(sSQL2,oCnn)oCmd.CommandType=CommandType.TextoCmd.Connection=oCnnoCnn.Open()resultOne=oCmd.ExecuteNonQuery()resultTwo=Convert.ToInt32(oCmd2.ExecuteScalar())oCnn.Close()messageBox.Show("result1:"+resultOne.ToString+Environment.NewLine+"result2:"+resultTwo.ToString)Dts.TaskResult=Dts.Results.SuccessEndSubEndClass我相信范围只适用于单个命令,而不适用于整个连接strSQL="INSERTINTOtablename(name)VALUES(@name);SELECTSCOPE_IDENTITY()"SQLCommand.CommandText=strSQLId=SQLCommand.ExecuteScalar()在上面的代码中,strSQL是一个完整的作用域,它始终返回相关插入语句的@@identity值。因此后续命令将有自己的范围。以上就是C#学习教程:C#中的SCOPE_IDENTITY——作用域分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: