来自 美高梅4858mgm 2019-11-30 17:44 的文章
当前位置: 美高梅4858官方网站 > 美高梅4858mgm > 正文

Connector升级引起的故障,Connector升级时会遇到哪些故障

此文章主要向大家讲述的是MySQL Connector升级时经常会引起的故障,以前在使用 Asp.NET + MySQL 来搭建系统平台,使用了 MySQL数据库网上 Connector 5.22 版,发现其中的 Membership 的实现上存在 Bug。

以前使用 Asp.NET + MySQL 搭建系统平台,使用了 MySQL 网上 Connector 5.22 版,发现其中的 Membership 的实现上存在 Bug,有时会抛出异常,引起网站服务停止,原因不明。

有时会抛出异常,引起网站服务停止,原因不明。

重新登录 MySQL官方网站,发现 Connector 已经升级到 6.22 ,于是下载,升级系统,希望能够修复以上的 Bug。

重新登录 MySQL官方网站,发现MySQL Connector 已经升级到 6.22 ,于是下载,升级系统,希望能够修复以上的 Bug。

美高梅4858mgm,结果大失所望,6.22 版竟然抛出了另一种异常,原来运行得挺好的系统,跑也跑不起来了。

结果大失所望,6.22 版竟然抛出了另一种异常,原来运行得挺好的系统,跑也跑不起来了。

用户代码未处理 System.FormatException
  Message="GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。"
  Source="mscorlib"
  StackTrace:
       在 System.Guid..ctor(String g)
       在 MySql.Data.Types.MySqlGuid.MySql.Data.Types.IMySqlValue.ReadValue(MySqlPacket packet, Int64 length, Boolean nullVal)
       在 MySql.Data.MySqlClient.NativeDriver.ReadColumnValue(Int32 index, MySqlField field, IMySqlValue valObject)
       在 MySql.Data.MySqlClient.ResultSet.get_Item(Int32 index)
       在 MySql.Data.MySqlClient.MySqlDataReader.GetFieldValue(Int32 index, Boolean checkNull)
       在 MySql.Data.MySqlClient.MySqlDataReader.GetValue(Int32 i)
       在 MySql.Data.MySqlClient.MySqlDataReader.GetValues(Object[] values)
       在 System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values)
       在 System.Data.ProviderBase.SchemaMapping.LoadDataRow()
       在 System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
       在 System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
       在 System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
       在 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
       在 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
       在 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)

用户代码未处理 System.FormatException

       ……

Message="GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。"

google 一下,有以下线索:

Source="mscorlib"

StackTrace:

 

在 System.Guid..ctor(String g)

在 MySql.Data.Types.MySqlGuid.MySql.Data.Types.IMySqlValue.ReadValue(MySqlPacket packet, Int64 length, Boolean nullVal)

在 MySql.Data.MySqlClient.NativeDriver.ReadColumnValue(Int32 index, MySqlField field, IMySqlValue valObject)

不管怎样,6.22 暂时不能用了,又将系统恢复为旧版,一个来回,几十个模块,2个小时不见了。

在 MySql.Data.MySqlClient.ResultSet.get_Item(Int32 index)

教训是:

在 MySql.Data.MySqlClient.MySqlDataReader.GetFieldValue(Int32 index, Boolean checkNull)

1、要为每个模块创建完善、独立的单元测试集,升级组件时,能够进行完整测试,也能很快找到问题。(创建完整的测试集合,非常费劲,但是很有价值,越到后期,价值越大)

在 MySql.Data.MySqlClient.MySqlDataReader.GetValue(Int32 i)

2、单元测试如果涉及到数据库,最好指定独立的connectString,建立另一个数据库,以免影响已有数据。

本文由美高梅4858官方网站发布于美高梅4858mgm,转载请注明出处:Connector升级引起的故障,Connector升级时会遇到哪些故障

关键词: