zoukankan      html  css  js  c++  java
  • MySQL Connector升级引起的故障

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

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

    结果大失所望,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)

           ……

    google 一下,有以下线索:

    http://forums.mysql.com/read.php?10,296932,297042#msg-297042

    http://dev.mysql.com/doc/refman/4.1/en/connector-net-news-6-2-0.html 

    http://bugs.mysql.com/bug.php?id=47928

    http://bugs.mysql.com/bug.php?id=48063

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

    教训是:

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

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

    3、单元测试最好是自己创建的全脚本,全自动化的,保证任何情况下测试集合都能运行才有用。

        这方面,.NET软件测试自动化之道  有很好的范例,如果没有这本书,从网上可以下载到它的代码,对于创建自己独立的自动化测试集很有用。

  • 相关阅读:
    Python爬取中国疫情的实时数据
    文件上传
    条件查询和分页(第三周)
    全国疫情可视化图表
    Jquery的Ajax技术(第二周)
    软件工程开课博客
    求一个整数数组、环形数组中最大子数组的和
    今日所学—Android中ViewPager的使用
    今日所学—Android中ExpandableListView的使用
    你看,蚂蚁金服都上市了,程序员什么时候才能财富自由呢?
  • 原文地址:https://www.cnblogs.com/chinaontology/p/1681938.html
Copyright © 2011-2022 走看看