在asp.net中连接MySql、使用MySql.Data.DLL、完全ADO.NET访问模式、操作方便如同SQL Server

MySql.Data.dll下载地址:http://dev.mysql.com/downloads/
http://free5.ys168.com/?dotnetly

using MySql.Data.MySqlClient;

public partial class Msg : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
string conn = "Data Source=127.0.0.1;User ID=root;Password=123;DataBase=NewDB;Charset=gb2312;";
        MySqlConnection con = new MySqlConnection(conn);
        con.Open();
        MySqlCommand cmd 
= new MySqlCommand("select * from book",con);
        MySqlDataReader dr 
= cmd.ExecuteReader();
        GridView1.DataSource 
= dr;
        GridView1.DataBind();
        dr.Close();
        con.Close();
    }
}

需要说明的是:MySql中的参数化不同于SqlServer
Sqlserver的参数化写法:
myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40));
myCommand.Parameters["@Address"].Value = address.Value;

MySql的参数化写法:
 cmd.Parameters.Add(new MySqlParameter("?p_bname", MySqlDbType.VarChar, 50));
 cmd.Parameters["?p_bname"].Value = book.Text;

.net是现在众多开发者的选择、而mysql数据一直以轻型、快速、免费深得许多开发者的暧昧、而php+mysql一直是许多大型网站所采用的方式。那能不能用.net+mysql这种组合方式了,当然可以,从这一篇随笔开始,我们一起领略.Net+Mysql的强势!
一、Mysql数据库
        现在最新版本是5.0.27,可从官方网站mysql中文网站下载到。
        详细的安装方法:参考http://bbs.mysql.cn/thread-261-1-1.html
二、数据连接
众所周知,.Net的数据访问使用ADO.NET,而.net中没有提供myql的专用连接工具(比如sql server的sql client),不过mysql.com提供所有用于my的数据连接工具,这里我们用MySql.Data.dll 里边封装了所有的mysql数据库的ADO.NET操作,作用方法与SQL SERVER没什么两样(举个例子:SQL SERVER中的SqlCommand,在MYSQL中就叫MySqlCommand)。

这个东东的下载地址:http://dev.mysql.com/downloads/connector/net/1.0.html
现在有三个版本:1.0.7 (GA),1.0.8 (RC),5.0.3
使用方法:把MySql.Data.dll 放到bin目录下,再引用using MySql.Data.MySqlClient;
三、数据管理
SQL SERVER有企业管理器,有查询分析器,那MYSQL有没有?mysql这些工具不像sqlserver 那样集成提供,mysql有很多管理工具,如:phpMyAdmin,Mysql Front等,而我推荐的是EMS SQL Manager 2005 for MySQL,现在最新版本是
3.7.7.1。它有两个类型:
SQL Manager 2005 for MySQL
SQL Manager 2005 Lite for MySQL


第一个要收费的,一直没有找到完全的破解,第二个是免费的随便使用,功能绝对够你开发用了
下载地址:http://www.sqlmanager.net/en/products/mysql/manager/download


推荐网站:
mysql官方网站:http://www.mysql.com
mysql中文网站:http://www.mysql.cn
EMS SQL Manager for MySQL工具的官方网站:http://www.sqlmanager.net
一、建立数据库、表、添加数据
这里我们使用图形化操作的SQL Manager 2005 Lite for MySQL来建立数据,它的操作界面非常类似OFFICE软件,使用方便、很容量上手、下面开始建立数据库及表
单击"Creat New DataBase":新建DB

输入密码:


选择客户端编码为gb2312,防乱码;也可以在新建好的数据库右键选择"DataBase Registration Info"更改编码:

新建表:输入表名:

新建字段




点击加号,手动添加数据,点出对号,提交数据:

选择DDL选项,直接看到刚才操作的脚本;也可以不用上面的方式操作,直接写sql脚本来创建数据:

二、ADO.NET数据操作
推荐使用MySQL Connector Net 5.0.3
web.config添加连接字符串:
<add name="MySqlServer" connectionString="Data Source=127.0.0.1;User ID=root;Password=123;DataBase=BOOK;Charset=gb2312"/>

为了方便,把对数据的访问封装到一个类中:
 1// 执行sql 
 2public int ExecuteSql(string strSql, MySqlParameter [] myPar)
 3    {
 4        try
 5        {
 6            myConnection.Open();
 7            MySqlCommand cmd = new MySqlCommand(strSql, myConnection);
 8            if (myPar != null)
 9            {
10                foreach (MySqlParameter spar in myPar)
11                {
12                    cmd.Parameters.Add(spar);
13                }

14            }

15            int result = cmd.ExecuteNonQuery();
16            myConnection.Close();
17            return result;
18        }

19        catch
20        {
21            return 0;
22        }

23    }
获取数据:
 1 public DataSet GetDataSet(string strSql)
 2    {
 3        try
 4        {
 5            MySqlDataAdapter da = new MySqlDataAdapter(strSql, myConnection);
 6            DataSet ds = new DataSet();
 7            da.Fill(ds);
 8            return ds;
 9        }

10        catch
11        {
12            return null;
13        }

14    }

在页面中我们用一个gridview实现数据的读取、写入、编辑、删除等操作:

数据绑定:
1 //databind
2    protected void BindGrid()
3    {
4        DataSet ds = obj.GetDataSet("SELECT * FROM book ORDER BY bid");
5        GridView1.DataSource = ds;
6        GridView1.DataBind();
7        ds.Dispose();
8    }
添加数据:
 1 string strSQL = "INSERT INTO book (bname,author,publish) VALUES (?bname,?author,?publish)";
 2            MySqlParameter[] mysp =
 3            {
 4                new MySqlParameter ("?bname",MySqlDbType.VarChar ),
 5                new MySqlParameter ("?author",MySqlDbType.VarChar),
 6                new MySqlParameter ("?publish",MySqlDbType.VarChar)
 7            }
;
 8            mysp[0].Value = txtName.Text.Trim();
 9            mysp[1].Value = txtAuthor.Text.Trim();
10            mysp[2].Value = txtPublish.Text.Trim();
11            if (obj.ExecuteSql(strSQL, mysp) == 1)
12            {
13                Response.Write("<script>alert('提交成功');</script>");
14                BindGrid();
15                txtName.Text = txtAuthor.Text = txtPublish.Text = "";
16            }
注意参数符号是"?"而不是"@",这一点不同于sql server
其它编辑等操作代码等请下载文件
下载详细完整的代码文件/Files/chy710/MySQL_ADONET.rar
下篇预告:mysql开发中的乱码问题
所用工具MySQL5.022
VS2005 Team Suite
MySQL Connector Net 5.0.3
EMS SQL Manage 2005 For MySQL
使用过MySQL的朋友都知道有乱码问题困扰,而出现此问题都是因没有正确设置其编码造成;
假设现在要做一个简体中文网站;
一、设置数据库编码
安装mysql时可选择编码,如果已经安装过,可以更改文件my.ini(此文件在mysql的安装目录下)中的配制以达到目的;打开文件找到两处:
[client]

port=3306

[mysql]

default-character-set=gb2312

# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=gb2312
更改红色部分为gb2312
此时新建数据库后,数据库目录下有个db.opt文件,内容如下:
default-character-set=gb2312
default-collation=gb2312_chinese_ci
编码数据库一致
二、客户端工具编码

编码设置与数据库
编码相同,可以用客户端工具直接写入数据,不产生乱码;
三、web.config中设置
连接字符串中的编码,MySQL Connector Net 5.0.3用
<connectionStrings>
    
<add name="MySqlServer" connectionString="Data Source=127.0.0.1;User ID=root;Password=123;DataBase=BOOK;Charset=gb2312"/>
  
</connectionStrings>
读取写入的编码
<globalization responseEncoding ="gb2312" requestEncoding ="gb2312"/>


OK,此时设置完成,做好的网站即一个简体中文网站,不会有乱码的;
如果需要做一个繁体网站,把以上设置编码的地方变成"gbk"即可。

常见问题:
Character set 'gbk' is not supported
出现此问题,十有八九可能你用了底版本的MySQL Connector ,因为在MySQL Connector 1.07中提供的字符编码是有限的,找到不到web.config中设置的编码类型,没有gbk,不过好像有big5,具体请看MySQL Connector 1.07源码中的CharSetMap.cs文件,其中

public static CharacterSet GetChararcterSet(DBVersion version, string CharSetName)
        
{
            CharacterSet cs 
= (CharacterSet)mapping[CharSetName];
            
if (cs == null)
                
throw new MySqlException("Character set '" + CharSetName + "' is not supported");
            
return cs;
        }

 

private static void LoadCharsetMap()
{
   mapping.Add(
"latin1"new CharacterSet("latin1"1));
            mapping.Add(
"big5"new CharacterSet("big5"2));
   .
}

而MySQL Connector 5.03中提供的字符编码相当全面了,所以建议使用5.03,不过5.03与旧版本的mysql数据库有些地方不太兼容。在执行存储过程等大的数据操作时会出现:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding
http://www.cnblogs.com/chy710/archive/2007/02/25/656149.html

posted on 2007-04-15 23:25  mbskys  阅读(3674)  评论(0)    收藏  举报