我的MSSQL 2008 DB中有很多SQLCLR函数和sprocs。调试和记录始终是一个问题。我已经在直接的C#应用程序中使用了Microsoft Enterprise Library Logging Application Block,并且想知道它是否(1)疯狂或(2)无法将其分层到SQLCLR中。我真的很喜欢使用配置文件为不同的事件定义滚动文本日志,事件日志和SMTP输出,所以如果还有其他方法可以这样做,我会全力以赴......
感谢。
答案 0 :(得分:1)
似乎有可能。我不知道这是否可取。
一种替代方法是在代码中定义跟踪侦听器,当然可以从数据库中读取配置。另一种方法是将消息记录到SQL表并使用触发器来启用通知。
我还必须质疑,真正的错误是你的数据库中是否有CLR存储过程,它们有如此多的业务逻辑需要记录。我是数据库中业务逻辑的忠实粉丝,但我对CLR存储过程保持警惕。
如果要使用企业应用程序块,则要编辑的配置文件将是C:\ Program Files \ Microsoft SQL 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)