[A]MySql.Data.MySqlClient.MySqlConnection 无法转换为 [B]MySql.Data.MySqlClient.MySqlConnection

Posted

技术标签:

【中文标题】[A]MySql.Data.MySqlClient.MySqlConnection 无法转换为 [B]MySql.Data.MySqlClient.MySqlConnection【英文标题】:[A]MySql.Data.MySqlClient.MySqlConnection cannot be cast to [B]MySql.Data.MySqlClient.MySqlConnection 【发布时间】:2012-01-26 04:05:14 【问题描述】:

当我将应用程序上传到服务器进行测试时,我遇到了这个奇怪的莫名其妙的错误。从我研究来看,似乎是mysql.Data冲突造成的,我上传的副本属于:6.3.7.0。

我该如何解决这个问题?我认为将其放入垃圾箱会“覆盖” GAC 中的垃圾箱?

NHibernate.Exceptions.GenericADOException: 无法执行查询 [ SELECT this_.Id as Id18_0_, this_.Email as Email18_0_,

(等属性)

FROM User this_ WHERE this_.Email = ?和 this_.Password = ? ]位置参数:#0> WvewHQlNRyQNKjBAtPR1AwrWQj0nwfmIflO + r4mCJQWA1jZ9zRvefcGz6ZA69b3v#1> 97403BA77F7C26BEC6B4F0A4F8509E02848CCD7DCF61D7DF5D79C3AAB2760E6AE1EB26F5D10D384E069F8C6089C47D3F1F0F17E7EBF30F71A68A39DF8863646F P>

[SQL: SELECT this_.Id as Id18_0_, this_.Email as Email18_0_,

(等属性)

FROM User this_ WHERE this_.Email = ?而 this_.Password = ?] --->

System.InvalidCastException:。类型 A 源自 'MySql.Data, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' 在位置 'C:\Windows\assembly\GAC_MSIL\MySql.Data\6.2.3.0__c5687fc88969c44d\ MySql.Data.dll'。类型 B 源自 'MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' 在位置 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP 的上下文'Default'中。 NET 文件\root\cb584441\17e039bb\assembly\dl3\6b14fe89\804a4095_b2c0cc01\MySql.Data.DLL'。

在 MySql.Data.MySqlClient.MySqlCommand.set_DbConnection(DbConnection value) at System.Data.Common.DbCommand.System.Data.IDbCommand.set_Connection(IDbConnection value) at NHibernate.AdoNet.AbstractBatcher.Prepare(IDbCommand cmd) at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd) 在 NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session) at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) 在 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) --- 内部异常堆栈跟踪结束--- 在 NHibernate .Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) 在 NHibernate.Loader.Loader.ListIgnore QueryCache(ISessionImplementor session, QueryParameters queryParameters) at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet1 querySpaces, IType[] resultTypes) at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) at NHibernate.Impl.CriteriaImpl.List(IList results) at NHibernate.Impl.CriteriaImpl.UniqueResult[T]() at NHibernate.Criterion.QueryOver1.SingleOrDefault() at NHibernate.Criterion.QueryOver`1.NHibernate.IQueryOver.SingleOrDefault()

【问题讨论】:

您是否部署了版本bin,并在服务器上安装了另一个版本? 嗨 Sam,我的版本是 6.3.7.0,我确定。我认为服务器已经在 GAC 中有 6.2.3.0。我怎样才能让它工作?有什么建议吗? 【参考方案1】:

几年后我也遇到了同样的问题!

我的服务器已在 gac 中安装了 MySql 连接器 6.4.6 版本,但我正在使用 6.8.3 版本,我收到“无法转换错误”。我通过将以下部分添加到 .config 文件来修复它

<system.data>
    <DbProviderFactories>
      <!-- Removes the dll installed in gac-->
      <remove invariant="MySql.Data.MySqlClient" />

      <!-- Add the dll copied in the bin folder-->
      <add name="MySQL" description="ADO.Net driver for MySQL" invariant="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/>
    </DbProviderFactories>
</system.data>

【讨论】:

+ for 嗨,从 2021 年开始,您的回答仍然可以帮助人们 +1【参考方案2】:

正如预期的那样,您使用的是两个不同版本的 MySql。版本6.2.3.0 和版本6.3.7.0。从这一点开始,我只能猜测:也许您使用的是使用不同版本的 MySql 构建的 dll(并且它允许并排安装)。

【讨论】:

嗨@Fischermaen,那我该怎么办?我认为服务器中的那个正在运行 6.2.3.0 的那个。 6.3.7.0 是我自己电脑的副本。我尝试从 bin 文件夹中删除 Mysql.data,我得到 YSOD 说 dll 丢失。 @RicL:你必须在你的电脑上使用与服务器上相同的版本。这是唯一的解决方案。 是否意味着我需要获取 6.2.3.0 mysql.data 并将其放入我的项目中?【参考方案3】:

我遇到了同样的问题,版本 18 和 19 之间存在冲突。在 web.config 中执行此操作修复了它。将新版本设置为您机器中的版本。

<dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-8.0.18.0" newVersion="8.0.19.0" />
      </dependentAssembly>

【讨论】:

以上是关于[A]MySql.Data.MySqlClient.MySqlConnection 无法转换为 [B]MySql.Data.MySqlClient.MySqlConnection的主要内容,如果未能解决你的问题,请参考以下文章

MySql.Data.MySqlClient.MySqlException:超时已过期

找不到 MySql.Data.MySqlClient.MySqlException 插入查询错误

MySql.Data.MySqlClient.MySqlException:重复条目

使用 MySql.Data.MySqlClient;不管用

MySql.Data.dll 中出现“MySql.Data.MySqlClient.MySqlException”类型的异常,但未在用户代码中处理

MySql.Data.MySqlClient.Replication.ReplicationManager抛出System.TypeInitializationException