我正在使用ADO.NET来访问SQL Server 2005,并且希望能够从我正在调用的T-SQL存储过程中进行登录。有可能吗?
使用ADO.NET时,我看不到’print’语句的输出,因为我只想使用日志记录进行调试,所以理想的解决方案是从SysInternals向DebugView发出消息。
我通过按照Eric Z Beard的建议编写一个SQLCLR过程来解决此问题。程序集必须使用强名称密钥文件签名。
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] public static int Debug(string s) { System.Diagnostics.Debug.WriteLine(s); return 0; } } }
创建了一个密钥和一个登录名:
USE [master] CREATE ASYMMETRIC KEY DebugProcKey FROM EXECUTABLE FILE = 'C:\..\SqlServerProject1\bin\Debug\SqlServerProject1.dll' CREATE LOGIN DebugProcLogin FROM ASYMMETRIC KEY DebugProcKey GRANT UNSAFE ASSEMBLY TO DebugProcLogin
将其导入到SQL Server:
USE [mydb] CREATE ASSEMBLY SqlServerProject1 FROM 'C:\..\SqlServerProject1\bin\Debug\SqlServerProject1.dll' WITH PERMISSION_SET = unsafe CREATE FUNCTION dbo.Debug( @message as nvarchar(200) ) RETURNS int AS EXTERNAL NAME SqlServerProject1.[StoredProcedures].Debug
然后,我能够使用以下命令登录T-SQL过程
exec Debug @message = 'Hello World'