日期:2014-05-16  浏览次数:20975 次

MyBatisNet+MySQL碰到的问题总结
    以前的项目的是MyBatisNET的项目都没有问题,今天突然想把数据库换为MySQL,在实验的过程没有预想的顺利,遇到了好几个问题!其中的好些问题,网上都有相应的解决方案。主要的可以参考:[url]http://blog.csdn.net/chencknj/article/details/5644888[/url]。
问题描述:

1. 错误提示Check the MySql。

       出现这个问题首先请下载mysql-connector-net,如果已经下载并安装了,继续检查IBatisNet的providers.config文件里的MySql 的provider节点的enabled是否设为“true”了,如果设为“true”,继续检查provider,官方提供的配置有些使用动态链接库文件版本很老,你需要手动去修改,例:

修改前:

<provider   
      name="MySql"   
      description="MySQL, MySQL provider 1.0.7.30072"   
      enabled="false"   
      assemblyName="MySql.Data, Version=1.0.7.30072, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection"   
      commandClass="MySql.Data.MySqlClient.MySqlCommand"   
      parameterClass="MySql.Data.MySqlClient.MySqlParameter"   
      parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType"   
      parameterDbTypeProperty="MySqlDbType"   
      dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter"   
      commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder"   
      usePositionalParameters="false"   
      useParameterPrefixInSql="true"   
      useParameterPrefixInParameter="true"   
      parameterPrefix="?"  
      allowMARS="false"      
  />  


修改后(加亮这个一定要注意,如果为false,是不能连接数据库成功的):

<provider  
    name="MySql"  
    description="MySQL, MySQL provider V6.3.2.0"  
    enabled="true"  
    assemblyName="MySql.Data, Version=6.3.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection"  
    commandClass="MySql.Data.MySqlClient.MySqlCommand"  
    parameterClass="MySql.Data.MySqlClient.MySqlParameter"  
    parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType"  
    parameterDbTypeProperty="MySqlDbType"  
    dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter"  
    commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder"  
    usePositionalParameters="false"  
    useParameterPrefixInSql="true"  
    useParameterPrefixInParameter="true"  
    parameterPrefix="?"  
    allowMARS="false"  
  />  


上面的解决方法是上面地址里面的内容。但是我觉得不够全面,需要注意的是,在provider里面的description的版本应该和你安装的mysql-connector-net的版本一致,否则仍然会报错!也是就是说如果你安装的mysql-connector-net是5.0.9,那么在provider里面应该写成

<provider 
      name="MySql" 
      description="MySQL, MySQL provider V5.0.9.0" 
      enabled="true" 
      assemblyName="MySql.Data, Version=5.0.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection" 
      commandClass="MySql.Data.MySqlClient.MySqlCommand"
      .......其他的省略........


2.  错误提示 Unable to open connection to "MySQL, MySQL provider VX.X.X.X"。

   出现这样的错误很有可能是Configure方法指定的配置文件的链接字符串有点问题。上面的地址的博客给出了一个参考的文件,可以参考。

<?xml version="1.0" encoding="utf-8" ?>  
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  <!--以上为固定格式,从这里开始以下是用户配置项    -->  
  <settings>  
    <!-- 该选项指示是否使用缓存,默认为true -->  
    <setting cacheModelsEnabled="true"/>  
    <!-- 当该选项为true时,你在调用指定的映射时你总是必须给出完整的名称例如:queryForObject(“Namespace.statement.Id”);    -->  
    <setting useStatementNamespaces="false" />  
  </settings>  
  <!-- 数据驱动提供类配置文件的路径和文件名 -->  
  <providers resource="providers.config" />  
  <!-- 指定一个属性源,相当与设置一些属性变量,该文件请查看下面   -->  
  <!--指定数据源${datasource} ${database} ${userid} ${password} 为DataBase.config定义的值-->  
  <database>  
    <!--<provider name="ByteFx"></provider>  
    <dataSource name="IBatisNet" connectionString="Database=zy_test;Data Source=localhost;User Id=root;Password=1234"/>-->  
    <provider name="MyS