MySql中的ODBC驱动与.NET驱动的中文异常

        Mysql为ODBC和.NET分别提供了特定的数据库驱动程序,分别为:
            (1)MySQL Connector/Net -- for connecting to MySQL from .NET 
            (2)Connector/ODBC - MySQL ODBC driver
       我使用的版本是:MySQL Connector/Net 5.0和MySQL Connector/ODBC 3.51,数据库版本是:MySQL - 5.0.22。
       近来在使用中发现,假设混合使用这两种数据库驱动程序储存/读取中文的时候,是会出现异常的。
       简单的测试代码如下:
       

ContractedBlock.gif ExpandedBlockStart.gif 简单测试页面
None.gif<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
None.gif
None.gif
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
None.gif
<html xmlns="http://www.w3.org/1999/xhtml">
None.gif
<head runat="server">
None.gif    
<title>简单测试</title>
None.gif
</head>
None.gif
<body>
None.gif    
<form id="form1" runat="server">
None.gif        
<div>
None.gif            Retrieve data via Odbc..
None.gif            
<asp:GridView ID="gridOdbc" runat="server">
None.gif            
</asp:GridView>
None.gif            
<hr />
None.gif            Retrieve data via Mysql..
None.gif            
<asp:GridView ID="gridMysql" runat="server">
None.gif            
</asp:GridView>
None.gif            
<hr />
None.gif            Name:
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
None.gif            
<br />
None.gif            EnglishName:
<asp:TextBox ID="txtEnglishName" runat="server"></asp:TextBox>
None.gif            
<hr />
None.gif            
<asp:Button ID="btnOdbc" runat="server" Text="Input data via Odbc" OnClick="btnOdbc_Click" />
None.gif            
<asp:Button ID="btnMysql" runat="server" Text="input data via Mysql" OnClick="btnMysql_Click" />
None.gif        
</div>
None.gif    
</form>
None.gif
</body>
None.gif
</html>
      代码简单使用两个GridView,通过不同的数据库驱动程序连接数据库,读取数据。数据分别使用两种方式录入。
ContractedBlock.gif ExpandedBlockStart.gif 读取数据
None.gif//使用ODBC读取数据
None.gif
    private void OdbcGetData()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        OdbcConnection conn 
= new OdbcConnection(ConfigurationManager.ConnectionStrings["odbc"].ConnectionString);
InBlock.gif        
string sql = "select * from coding";
InBlock.gif        OdbcDataAdapter da 
= new OdbcDataAdapter(sql, conn);
InBlock.gif        DataSet ds 
= new DataSet();
InBlock.gif        da.Fill(ds, 
"coding");
InBlock.gif
InBlock.gif        gridOdbc.DataSource 
= ds;
InBlock.gif        gridOdbc.DataBind();
ExpandedBlockEnd.gif    }

None.gif
None.gif    
//使用NET读取数据
None.gif
    private void MysqlGetData()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        MySqlConnection conn 
= new MySqlConnection(ConfigurationManager.ConnectionStrings["Mysql"].ConnectionString);
InBlock.gif        
string sql = "select * from coding";
InBlock.gif        MySqlDataAdapter da 
= new MySqlDataAdapter(sql, conn);
InBlock.gif        DataSet ds 
= new DataSet();
InBlock.gif        da.Fill(ds, 
"coding");
InBlock.gif
InBlock.gif        gridMysql.DataSource 
= ds;
InBlock.gif        gridMysql.DataBind();
ExpandedBlockEnd.gif    }

None.gif
       录入数据
ContractedBlock.gif ExpandedBlockStart.gif 录入数据
None.gif//使用ODBC录入数据
None.gif
    protected void btnOdbc_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        OdbcConnection conn 
= new OdbcConnection(ConfigurationManager.ConnectionStrings["odbc"].ConnectionString);
InBlock.gif        
string sql = string.Format("insert into coding(id,name,englishname) values(null,\'{0}\',\'{1}\')", txtName.Text, txtEnglishName.Text);
InBlock.gif        OdbcCommand cmd 
= new OdbcCommand(sql, conn);
InBlock.gif        conn.Open();
InBlock.gif        cmd.ExecuteNonQuery();
InBlock.gif        conn.Close();
InBlock.gif
InBlock.gif        OdbcGetData();
InBlock.gif        MysqlGetData();
ExpandedBlockEnd.gif    }

None.gif
None.gif    
//使用NET录入数据
None.gif
    protected void btnMysql_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        MySqlConnection conn 
= new MySqlConnection(ConfigurationManager.ConnectionStrings["Mysql"].ConnectionString);
InBlock.gif        
string sql = string.Format("insert into coding(id,name,englishname) values(null,\'{0}\',\'{1}\')", txtName.Text, txtEnglishName.Text);
InBlock.gif        MySqlCommand cmd 
= new MySqlCommand(sql, conn);
InBlock.gif        conn.Open();
InBlock.gif        cmd.ExecuteNonQuery();
InBlock.gif        conn.Close();
InBlock.gif
InBlock.gif        OdbcGetData();
InBlock.gif        MysqlGetData();
ExpandedBlockEnd.gif    }
      简单输入一些测试数据后可以发现,英文是正常的,而中文是乱码。
     

       解决办法正在探索中,也希望各位能提出宝贵意见。

转载于:https://www.cnblogs.com/DonLiang/archive/2007/04/04/699769.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值