ASP.NET 访问 MySql

要使用 ASP.NET 来连接 MySql 数据库的话,

您必须要有访问 MySql 的驱动程序,当然您完全可以使用 ODBC 来完成对 MySql 的访问,

但是呢,和访问其他数据库一样,使用 ODBC 在一定的程度上会有效率较低的问题,

所以一般情况下是不使用 ODBC 访问 MySql 数据库的,相比之下,

您可以选择使用由 MySql 提供的专门针对 .NET 访问 MySql 提供的驱动程序,

也即是 .NET Connector ,这个呢,给个下载的链接吧,

http://dev.mysql.com/downloads/connector/net/1.0.html

现在针对 .NET 的最新版本是 mysql-connector-net-6.3.1 ,

这个版本呢是支持 .NET Framework 2.0 及以上版本的,

以前由 MySql 提供的一些 .NET Connector 的老版本呢,只支持老版本的 .NET Framework,

比如 1.x 的版本,那些东西呢,已经不太使用了,所以要下载的话就直接下载最新版的就 OK 了,

下载后,您可以解压安装,其会自动将您机器上安装的 MySql 数据库和 Visual Studio 进行绑定,

绑定完成后,您便可以在 Visual Studio 中很方便的访问 MySql 数据库了,

我机器上 MySql 版本为 5.1 ,

然后是 Visual Studio Team System 2008,

安装好了 .NET Connector 后呢,就可以通过下面的简单操作来访问数据库了,

打开“服务器资源管理器”-->“添加连接”—>

image

上面标记的呢就是当您安装了 .NET Connector 后,其自动绑定到 Visual Studio 中的驱动(提供)程序,

image

上面呢,Server name 就是您的 MySql 所在的 PC 的地址,可以为机器名,也可以是 IP 地址,

而下面的 User name 和 Password 就是用户名和密码了,

完了之后呢,您还要选择一个将要访问的数据库,这个 blogs 呢是我一开始在 MySql 中建立的数据库,

事实上,在这里您还可以通过单击“高级”来查看您上面的设置所对应的数据库连接字符串,

image

做完这些以后呢,就可以在“服务器资源管理器”中看到

image

上面就是我添加到 Visual Studio 中的与 MySql 数据库的连接,

上面完成了以后呢,您便可以很方便的使用 SqlDataSource 来访问 MySql 数据库了,

当然咯,上面是通过设置来完成的,而下面呢,

我还写了一个 Demo 来完成使用代码来访问 MySql 数据库,

我呢,将会使用到上面的数据库 blogs 中的数据表 BlogsUsers,事实上呢,

我这个数据表就是用来存储用户的,其中包括的字段描述如下

image

下面就直接来看这个 Demo 的效果吧,完了之后再来看代码,

image

上面呢,也就是注册一个用户,注册成功后,

image

再来看 MySql 数据库中的数据,验证刚才的注册是否成功!!!

image

这里就表明插入数据成功了!!!

要想在 Demo 的代码中使用 .NET Connector 提供的一些类来完成对 MySql 的访问,

您还必须做如下的一些操作,

就是要添加一个引用,

1

2

上面的这个引用的组件呢是随着 .NET Connector 的安装而安装上的并且被绑定到了 Visual Studio 中,

然后就是要想在 Code-Behind 中使用有 .NET Connector 提供的一些类的话,

您必须引用两个命名空间,这两个命名空间呢就是上面添加的组件 MySql.Data 提供的,

using MySql.Data.MySqlClient;
using MySql.Data.Types

下面呢就稍微看些代码吧,这些代码中呢会写一定的注释,那些都是需要注意的,

先看其中的 JavaScript 代码吧

<script type="text/javascript" language="javascript">
    //这个呢是作为用户名这个 TextBox 的 onkeyup 事件
    function CheckUserName(name) {
        document.getElementById("imgValidate").style.visibility = "visible";
       
//异步调用一个 WebServices 来判断一个用户当前输入的用户名是否在数据库中已经存在
        WebForm.WebServices.Demo__44__Use.ValidateUserName(name,
                OnSuccessCallback, OnFailedCallback
);

    }

    function OnSuccessCallback(result, userContext, methodName) {
        //如果 WebServices 返回的是 true 的话
        //表明数据库中暂时还不存在您输入的用户名
        //表示这个输入的用户名可以用来注册一个用户

        if (result) {
            document.getElementById("imgValidate").src = "Image/Yes.png";
        }
        else {
            document.getElementById("imgValidate").src = "Image/No.png";
        }
    }

    function OnFailedCallback(error, userContext, methodName) {
        document.getElementById("imgValidate").src = "Image/No.png";
        var msg = "";
        msg += "错误信息:" + error.get_message();
        msg += "异常类型:" + error.get_exceptionType();
        msg += "错误代码:" + error.get_statusCode();
        msg += "堆栈信息:" + error.get_stackTrace();
        msg += "超时信息:" + error.get_timedOut();
        alert(msg);
    }
    //注册按钮的 OnClientClick 事件
    function CheckPwd() {
        if (document.getElementById("txtPwdFirst").value !=
            document.getElementById("txtPwdSecond").value) {
            alert("两次密码输入不一致!!!");
            return false;
        }
    }
</script>

上面的 JavaScript 代码呢是很简单的,

下面就来看其中被 JavaScript 调用的 WebServices 的代码吧,

using System;
using System.Web.Services;
using MySql.Data.MySqlClient;

namespace WebForm.WebServices
{
    [WebService(Namespace = "
http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class Demo__44__Use : System.Web.Services.WebService
    {
       
[WebMethod]
        public bool ValidateUserName(string userName)
        {
            int total = 0;
            string conStr = "server=XiaoZhen-PC;User Id=root;database=blogs;" +
                          
"Password=XiaoZhen;Character Set=gb2312;";
            using (MySqlConnection mySqlCon = new MySqlConnection(conStr))
            {
                mySqlCon.Open();
                using (MySqlCommand mySqlCom = mySqlCon.CreateCommand())
                {
                    //这里需要注意的是在 Sql 语句中有一个参数是 ?BlogsName
                    //很明显,这个参数有点古怪,和我们一直使用的 @ 不一样,
                    //这是因为在 MySql 以前的提供的 .NET Connector 中
                    //都是采用 ? 来标志一个参数的,而现在的 .NET Connector 呢,
                    //您既可以采用 ? 来标志一个参数,您也可以使用一个 @ 符号来标志一个参数
                    //新版的 .NET Connector 对此都是支持的

                    string sqlStr = "SELECT COUNT(*) FROM BlogsUsers WHERE BlogsName=?BlogsName";
                    mySqlCom.CommandText = sqlStr;
                    mySqlCom.Parameters.AddWithValue("?BlogsName", userName);

                    total = Convert.ToInt32(mySqlCom.ExecuteScalar());
                }
            }
           
//如果数据表中已经存在这个用户了就不能注册,故返回 false ,否则返回 true
            return total == 0 ? true : false;
        }
    }
}

下面就是看页面的 Code-Behind 了

using System;
using MySql.Data.MySqlClient;

namespace WebForm
{
    public partial class Demo__44 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnRegister_Click(object sender, EventArgs e)
        {
            lblMsg.Text = String.Empty;
            string conStr = "server=XiaoZhen-PC;User Id=root;database=blogs;" +
                            "Password=XiaoZhen;Character Set=gb2312;";

            using (MySqlConnection mySqlCon = new MySqlConnection(conStr))
            {
                mySqlCon.Open();
                using (MySqlCommand mySqlCom = mySqlCon.CreateCommand())
                {
                    //前面也提到过,在 .NET 访问 MySql 下,您可以使用 ? 来标志参数
                    //也可以使用 @ 来标志一个参数
                    //前面使用的是用 ? 来标志参数,
                    //你那么这里我便使用 @ 来标志参数

                    string sqlStr =
                       
"INSERT INTO BlogsUsers(BlogsName,BlogsPassword,BlogsSex,BlogsBirthday) " +
                        "VALUES(@name,@password,@sex,@birthday)";

                    mySqlCom.CommandText = sqlStr;

                    mySqlCom.Parameters.AddWithValue("@name", txtName.Text.Trim());
                    mySqlCom.Parameters.AddWithValue("@password", txtPwdFirst.Text.Trim());                   
                    if (rBtnMan.Checked)
                    {
                        mySqlCom.Parameters.AddWithValue("@sex", "Man");
                    }
                    else
                    {
                        mySqlCom.Parameters.AddWithValue("@sex", "Woman");
                    }
                    mySqlCom.Parameters.AddWithValue("@birthday", txtBirthday.Text.Trim());

                    lblMsg.Text = "恭喜您,注册成功~~~";
                   
mySqlCom.ExecuteNonQuery();
                }
            }
            txtName.Text = String.Empty;
            txtPwdFirst.Text = String.Empty;
            txtPwdSecond.Text = String.Empty;
            txtBirthday.Text = String.Empty;
        }
    }
}

好了,到这里,整个 Demo 就也算是比较完整的完成了,

总结一下吧,

本篇博文呢,主要是完成使用 .NET Connector 这个由 MySql 提供的提供程序来完成访问 MySql,

而在此呢,又介绍了如何在 Visual Studio 中使用 “服务器资源管理器”来访问 MySql,

同时呢,又介绍了如何使用代码来访问 MySql 数据库,

其中要注意的就是 MySql 的那两种标志参数的方式,其中有一种是使用 ? 来标志参数,

这个和 Oracle 或者 SqlServer 或者 DB2 中的标志参数都是不同的,值得注意一下!!!

 

 

posted @ 2010-03-30 15:10  小宝马的爸爸  阅读(6474)  评论(1编辑  收藏  举报