我必须使用现有的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”始终为空
是否有一个示例将context_info传递给SqlCommand或SqlConnection或SqlTransaction?
答案 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和触发器调用之间的连接...