在用VS2008开发网站时,调试代码时(选择了附加到进程的方法进行调试),在执行一个SQL查询时报以下错误:
“/VM”应用程序中的服务器错误。
拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限。
源错误:
行 116: dsCommand.SelectCommand.CommandText=sql;
行 117: dsCommand.SelectCommand.CommandType=CommandType.Text;
行 118: dsCommand.SelectCommand.Connection.Open();
行 119: try
行 120: { |
源文件: D:/Work/VM/SqlServerDAL/SqlLink.cs
行: 118
堆栈跟踪:
[SqlException (0x80131904): 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限。]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1948826
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4844747
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +204
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +175
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +137
System.Data.SqlClient.SqlConnection.IssueSQLDebug(UInt32 option, String machineName, UInt32 pid, UInt32 id, String sdiDllName, Byte[] data) +561
System.Data.SqlClient.SqlConnection.CheckSQLDebug(SqlDebugContext sdc) +129
System.Data.SqlClient.SqlConnection.CheckSQLDebugOnConnect() +349
System.Data.SqlClient.SqlConnection.CompleteOpen() +4874985
System.Data.SqlClient.SqlConnection.Open() +185
Vm.SqlServerDAL.SqlLink.SelectSqlSet(String sql) in D:/Work/VM/SqlServerDAL/SqlLink.cs:118
Vm.SqlServerDAL.BaseEntity.clsCity.Load_HomeOftenCity() in D:/Work/VM/SqlServerDAL/BaseEntity/clsCity.cs:452
Vm.Vm.business.Hotel.HotelSearchGuoNei.bindChangQuCity() in D:/Work/VM/Web/business/hotel/HotelSearchGuoNei.aspx.cs:39
Vm.Vm.business.Hotel.HotelSearchGuoNei.Page_Load(Object sender, EventArgs e) in D:/Work/VM/Web/business/hotel/HotelSearchGuoNei.aspx.cs:30
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
|
版本信息: Microsoft .NET Framework 版本:2.0.50727.3053; ASP.NET 版本:2.0.50727.3053
百度了一下,解决方法如下:
在.net中调用时出现“拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限”的错误的解决办法。
该问题是我在用指定的URL启动项目后,再“附加进程”后运行程序时出现的。该问题主要是.net2005的调试机制引起的,当已启动程序,再附加进程后,他默认是要对SQL Server 也要进行调试的,可这需要装补丁才能支持。所以就出现了“拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限”的错误。这时我们可以通过更改它的调试类型来处理该问题,并使调试正常进行。
在“附加到进程”对话框中点击“附加到:”后的“选择”按钮,可以看到它默认的选项是“自动确定要调试的代码类型”。完后选中“调试以下代码”,并只选择“托管”。这样就可以正常进行了。
另外,若项目整体无法启动调试,也可以先在项目属中指定从某一URL进行调试,完后在启动之后通过上面的方法将该进程附加到调试器中也可以实现对项目的调试。