首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntLib和SQLCLR?

EntLib和SQLCLR?
EN

Stack Overflow用户
提问于 2011-02-25 00:40:34
回答 1查看 271关注 0票数 1

我的MSSQL2008DB中有相当多的SQLCLR函数和存储过程。调试和日志记录始终是一个问题。我在直接的C#应用程序中使用了很多微软企业库日志应用程序块,我想知道它是(1)疯狂还是(2)不可能将其层叠到SQLCLR中。我真的很喜欢使用配置文件为不同的事件定义滚动文本日志、事件日志和SMTP输出,所以如果有其他方法,我会洗耳恭听……

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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得出了这个结论:

代码语言:javascript
复制
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加载并运行了它:

代码语言:javascript
复制
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')

这给了我以下结果:

代码语言:javascript
复制
------------------------------------------------------------------------------
C:\Program Files\Microsoft SQL Server\MSSQL10.INSTANCE_NAME\MSSQL\Binn\sqlservr.config

(1 row(s) affected)

-------------------------------------------------------------------------
is a developer

(1 row(s) affected)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5107631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档