我正在使用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'