0

我有一个用 sql clr (sql 2005, .net 3.5) 编写的触发器,我需要获取用户名、主机名和 app_name。在 TSQL 中,我会简单地使用

select suser_name()
select host_name()
select APP_NAME()

在我的 .Net 代码中,我尝试过

System.Security.Principal.WindowsIdentity.GetCurrent().Name
System.Environment.MachineName
System.AppDomain.CurrentDomain.ApplicationIdentity.FullName

但在安全模式下运行我无权访问这些属性中的任何一个。关于如何实现这一点的任何想法?

谢谢

4

1 回答 1

1

您可以使用上下文连接并执行必要的 TSQL 来检索您需要的值。

在您的 CLR 触发器定义中:

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Context Connection=true";

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;

cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT suser_name() as suser_name, host_name() as host_name, APP_NAME() as app_name";

conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
于 2010-07-16T14:59:59.537 回答