近段时间公司网站架构需调整,需要将以前一部分网站使用的MSSQL替换成MYSQL,因一直在使用MSSQL所以尝试了下使用MYSQL,感觉用起来和sql区别不是很大。当然,在尝试的过程中也遇到了一些问题,主要表现在读取DB出来的中文数据乱码,搜索整理了一些资料问题得以解决。
ASP.NET连接MySQL需要一个组件(.net本身不提供访问MySQL的驱动)MySQL.Data.Dll,此为官方提供(该组件是C#开发,开源的),有多个版本选择,采用的数据访问模式为ADO.NET,访问方式和asp.net访问sqlserver很像,下面是测试demo:
MySqlConnection myConnection = new MySqlConnection( " Persist Security Info=False;database=protest;server=localhost;Connect Timeout=30;user id=root;pwd=beyond " );
MySqlCommand myCommand = new MySqlCommand(query,myConnection);
myConnection.Open();
myCommand.ExecuteNonQuery();
MySqlDataReader myDataReader = myCommand.ExecuteReader();
string str = "" ;
while (myDataReader.Read() == true )
{
str += myDataReader[ " id " ];
str += Convert.ToString(myDataReader[ " username " ]);
str += Convert.ToString(myDataReader[ " ulike " ]);
}
myDataReader.Close();
myConnection.Close();
Response.Write(str);
注:MYSQL创建数据库以及表的过程省略,这里默认已经存在库和表数据了。
使用的MySQL.Data.Dll组件可以在http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-5.0.6.zip/from/pick 这里下载,安装完毕后在Binaries\.NET 2.0目录中将该组件copy到项目bin目录中引用即可,也可以从http://files.cnblogs.com/zzxbest/mysql-connector-net-5.0.6.zip 这里点击下载获取。
读取MYSQL中文数据乱码问题:
1.MYSQL中的数据是这样的:
包含“旅游”、“爬山”两个中文选项内容。用上面的代码读取处理后内容乱码了,具体的乱码信息就不贴出来了,直接贴解决方案吧。
2.解决方案:
public string ISO8859_GB2312( string read)
{
// 声明字符集
System.Text.Encoding iso8859, gb2312;
// iso8859
iso8859 = System.Text.Encoding.GetEncoding( " iso8859-1 " );
// 国标2312
gb2312 = System.Text.Encoding.GetEncoding( " gb2312 " );
byte [] iso;
iso = iso8859.GetBytes(read);
// 返回转换后的字符
return gb2312.GetString(iso);
}
即读取数据库数据是把编码进行一下转换操作即可。网上也有相关的资料说可以通过在连接字符串中添加编码;charset=gb2312方式或修改my.ini文件,但我尝试了一下均未能解决上述问题,通过上面的方法方可解决不知何故。