关于C#数据库连接的问题

conanhhy 2013-08-29 01:55:32

我把一个项目部署到服务器上,进行测试,结果SQL操作一直失败。之后查看了日志,发现以下异常:

System.AppDomainUnloadedException: Attempted to access an unloaded appdomain. (Exception from HRESULT: 0x80131014)
at System.StubHelpers.StubHelpers.InternalGetCOMHRExceptionObject(Int32 hr, IntPtr pCPCMD, Object pThis)
at System.StubHelpers.StubHelpers.GetCOMHRExceptionObject(Int32 hr, IntPtr pCPCMD, Object pThis)
at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel& isolationLevel, ITransactionShim& transactionShim)
at System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[] propagationToken)
at System.Transactions.TransactionStatePSPEOperation.PSPEPromote(InternalTransaction tx)
at System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction tx)
at System.Transactions.EnlistableStates.Promote(InternalTransaction tx)
at System.Transactions.Transaction.Promote()
at System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction transaction)
at System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts)
at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx)
at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()

请大家帮忙看看,是什么原因引起的,该怎么解决?

发布环境:

1. WEB站点和数据库分别在不同的服务器上
2. 数据库事务使用的是TransactionScope(不知道是否有因果关系)

谢谢各位啦
...全文
191 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
conanhhy 2013-09-02
  • 打赏
  • 举报
回复
感谢各位的回复。 目前和客户商讨后,将数据库服务器和WEB站点服务器合并了(估计是成本考虑)。所以一开始提到的那个问题就不存在了。不过在这过程中也试过各位说的方法,都没有解决问题。 GOOGLE了一把,关于那个异常多是身份验证之类引起的,像由数据库连接引起的相关资料却是非常少。 积分分摊给各位,谢谢各位了
lyx266 2013-08-29
  • 打赏
  • 举报
回复
引用 5 楼 conanhhy 的回复:
web连接语句?是连接字符串吗? 下面是连接字符串: Data Source=xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx;min pool size=1;max pool size=20;
连接字符串 加上auto-enlist=false 试试 你用的是分布式事务吧...为什么要用分布式事务呢
我的波塞冬 2013-08-29
  • 打赏
  • 举报
回复
是不是数据库的地址不对?
conanhhy 2013-08-29
  • 打赏
  • 举报
回复
web连接语句?是连接字符串吗? 下面是连接字符串: Data Source=xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx;min pool size=1;max pool size=20;
Dotar 2013-08-29
  • 打赏
  • 举报
回复
没看出有什么问题,你的web连接语句呢
「已注销」 2013-08-29
  • 打赏
  • 举报
回复
代码应该不会有问题。这种情况应该是服务器上配置的问题。数据库服务器设置了权限限制或者系统防火墙之类,也可能是应用服务器与数据库服务器之间网络限制。尝试使用本机的管理器访问数据库服务器库来确定问题。
conanhhy 2013-08-29
  • 打赏
  • 举报
回复
本地调试没有出现错误。在测试环境里也没有出现问题。 但和发布环境有一个根本区别,就是站点和数据库在同一个服务器上 我贴上带事务执行数据库增删改操作的部分代码:

// 打开数据库连接(含事务)
public void OpenConnectionWithTransaction(IDAO dao)
{
    AbstractDAO absDAO = (AbstractDAO)dao;
    absDAO.transScope = new TransactionScope();
    absDAO.OpenDBConn();
}
// 对外接口
public int ExecuteNonQueryForTrans(IDAO dao, string sql, List<SqlParameter> sqlParams)
{
    try
    {
        AbstractDAO absDAO = (AbstractDAO)dao;
        if (sqlParams == null)
        {
            sqlParams = new List<SqlParameter>();
        }
        return absDAO.NonQuery(sql, sqlParams);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
调用时:

dao.OpenConnectionWithTransaction(dao)
dao.ExecuteNonQueryForTrans(dao, sql, sqlParams)
灬浪子灬 2013-08-29
  • 打赏
  • 举报
回复
贴代码看看!调试没错误?

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧