c# ADO set context_info for SQL INSERT TRIGGER

c# ADO set context_info for SQL INSERT TRIGGER

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

如何将 "context_info" 传递给 c# SqlCommand 以便此触发器继续正常工作?

SQL-触发器中的用法:

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 的示例吗?

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

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

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