我有一个用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
但是在安全模式下运行我无法访问任何这些属性。关于如何实现这一点的任何想法?
由于
答案 0 :(得分:1)
您可以使用context connection并执行必要的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();