我在执行该过程时收到此错误。此问题仅出现在生产中,而不出现在测试和开发系统中。而且这个问题也不会一直发生。当出现此错误时,通过应用程序使用此数据库的所有用户都会被挂起,这意味着与数据库的所有用户连接都将被重置。几秒钟后它会恢复并正常工作。
错误信息是
System.Threading.ThreadAbortException: Thread was being aborted.
at SNIReadSync(SNI_Conn* , SNI_Packet** , Int32 )
at SNINativeMethodWrapper.SNIReadSync(SafeHandle pConn, IntPtr& packet, Int32 timeout)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean& marsCapable)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at Project1.Library.dbconn.OpenConn()
at Project1.Library.clsUserMenuDAL.SubChildMenu(clsUserMenuBAL obj)
我正在使用的存储过程如下所示,
Alter PROCEDURE [dbo].[proc_LoadMainMenu]
@User_Gid [int] = 0,
@profile_gid [int] = 0,
@soft_gid [int] = 0
WITH EXECUTE AS CALLER
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
declare @lsquery varchar(max)
set @lsquery=' select menu_gid,menu_desc,menu_link,menu_reportorder from qad_adm_tmenu a '
set @lsquery =@lsquery+' inner join qad_adm_tprofilerights b on b.profilerights_menugid=a.menu_gid'
set @lsquery =@lsquery+' inner join qad_map_tuserprofile c on c.userprofile_profilerightsgid=b.profilerights_gid'
set @lsquery =@lsquery+' where c.Userprofile_usergid ='+ convert(varchar(20),@User_Gid) + 'and c.userprofile_profilegid = ' + convert(varchar(20),@profile_gid) + ''
set @lsquery =@lsquery+' and a.menu_softgid= '+ convert(varchar(20),@soft_gid) +' and a.menu_ordernumber =2'
set @lsquery =@lsquery+' and c.Userprofile_isremoved = ''N'' and userprofile_profilerightsaccess=''Y''
order by menu_reportorder '
exec(@lsquery)
END
提前致谢...