我的MSSQL2008DB中有相当多的SQLCLR函数和存储过程。调试和日志记录始终是一个问题。我在直接的C#应用程序中使用了很多微软企业库日志应用程序块,我想知道它是(1)疯狂还是(2)不可能将其层叠到SQLCLR中。我真的很喜欢使用配置文件为不同的事件定义滚动文本日志、事件日志和SMTP输出,所以如果有其他方法,我会洗耳恭听……
谢谢。
发布于 2011-02-25 01:47:04
这似乎是可能的。我不知道这是否可取。
一种替代方法是在代码中定义一个跟踪侦听器,该侦听器当然可以从数据库读取配置。另一个简单的方法是将消息记录到SQL表中,并使用触发器启用通知。
我还不得不质疑,真正的错误是不是你的数据库中有CLR存储的过程,这些过程具有如此多的业务逻辑,以至于它们需要日志记录。我非常喜欢我的数据库中的业务逻辑,但我对CLR存储过程很警惕。
如果要使用企业应用程序块,则要编辑的配置文件应为C:\Program Files\Microsoft Server\MSSQL10.INSTANCE_NAME\MSSQL\Binn\sqlservr.config.但是,当您重新启动sql server时,它似乎不会向此文件写入值。我通过下面的CLF PROC和UDF得出了这个结论:
using System;
using System.Configuration;
using Microsoft.SqlServer.Server;
namespace LoggedClr
{
public static class AppDomainInfo
{
[SqlFunction]
public static string GetConfigFileName()
{
return AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
}
[SqlFunction]
public static string GetAppConfigValue(string key)
{
return ConfigurationManager.AppSettings[key];
}
[SqlProcedure]
public static void SetAppConfigValue(string key, string value)
{
ConfigurationManager.AppSettings[key] = value;
}
}
}我使用下面的T-SQL加载并运行了它:
CREATE DATABASE TestAssembly
GO
USE TestAssembly
GO
ALTER DATABASE TestAssembly SET TRUSTWORTHY ON;
GO
ALTER AUTHORIZATION ON DATABASE::TestAssembly TO test
GO
DROP ASSEMBLY LoggedClr
GO
CREATE ASSEMBLY LoggedClr
from 'C:\justin''s projects\TestClr\LoggedClr\LoggedClr\bin\Debug\LoggedClr.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
GO
CREATE FUNCTION GetConfigFileName () RETURNS NVARCHAR(MAX) AS
EXTERNAL NAME LoggedClr.[LoggedClr.AppDomainInfo].GetConfigFileName
GO
CREATE FUNCTION GetAppConfigValue (@key nvarchar(max)) RETURNS nvarchar(max) AS
EXTERNAL NAME LoggedClr.[LoggedClr.AppDomainInfo].GetAppConfigValue
GO
CREATE PROCEDURE SetAppConfigValue (@key nvarchar(max), @value nvarchar(max)) AS
EXTERNAL NAME LoggedClr.[LoggedClr.AppDomainInfo].SetAppConfigValue
GO
SELECT dbo.GetConfigFileName()
EXEC dbo.SetAppConfigValue 'justin', 'is a developer'
SELECT dbo.GetAppConfigValue('justin')这给了我以下结果:
------------------------------------------------------------------------------
C:\Program Files\Microsoft SQL Server\MSSQL10.INSTANCE_NAME\MSSQL\Binn\sqlservr.config
(1 row(s) affected)
-------------------------------------------------------------------------
is a developer
(1 row(s) affected)https://stackoverflow.com/questions/5107631
复制相似问题