c#ADO为SQL INSERT TRIGGER设置context_info

时间:2018-06-07 07:25:40

标签: c# sql ado.net ado sqlcommand

我必须使用现有的INSERT触发器,该触发器使用CONTEXT_INFO ...

如何将“context_info”传递给c#SqlCommand以使此触发器保持正常工作?

SQL-Trigger中的用法:

select @ctxt=context_info from master.dbo.sysprocesses where spid = @@spid
set @session=substring(@ctxt,1,4)
set @contextid=substring(@ctxt,5,4)
set @ntduser=substring(@ctxt,9,120)

尝试:

                            //string strContext = "declare @context_info varbinary(30) set @context_info = cast('abcdefghijklmnopqrstuv1234567890' as varbinary(30)) set context_info @context_info";
                            ///////////////

                            SqlCommandBuilder cb = new SqlCommandBuilder(da);
                            da.UpdateCommand = cb.GetUpdateCommand();
                            //da.UpdateCommand.CommandText= da.UpdateCommand.CommandText.Replace(" WHERE ", strContext+" WHERE ");
                            //da.UpdateCommand.CommandText = "SET CONTEXT_INFO  0x1 " + da.UpdateCommand.CommandText;
                            da.Update(dataTable);
                            da.Dispose();

看到注释掉的代码...... 在我的SQL触发器中,“context_info”始终为空

已经读过: https://social.msdn.microsoft.com/Forums/en-US/4a0ecb28-11cb-45ec-adbd-d72ac65b158a/how-to-pass-net-applications-parameter-to-a-trigger?forum=transactsql 但也行不通。

是否有一个示例将context_info传递给SqlCommand或SqlConnection或SqlTransaction?

1 个答案:

答案 0 :(得分:1)

我使用类似这样的东西(简化)一次来设置一些信息(guid),以便可以从触发器内部检索...

string sql = $"DECLARE @session uniqueidentifier; SET @session = '{guid}'; SET CONTEXT_INFO @session";
var cmd = new SqlCommand(sql, connection, transaction);
cmd.ExecuteNonQuery();

请确保不要关闭设置context_info和触发器调用之间的连接...