ASP.NET 訪問 MySql

來源:互聯網
上載者:User

要使用 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 後呢,就可以通過下面的簡單操作來訪問資料庫了,

開啟“伺服器總管”-->“添加串連”—>

上面標記的呢就是當您安裝了 .NET Connector 後,其自動綁定到 Visual Studio 中的驅動(提供)程式,

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

而下面的 User name 和 Password 就是使用者名稱和密碼了,

完了之後呢,您還要選擇一個將要訪問的資料庫,這個 blogs 呢是我一開始在 MySql 中建立的資料庫,

事實上,在這裡您還可以通過單擊“進階”來查看您上面的設定所對應的資料庫連接字串,

做完這些以後呢,就可以在“伺服器總管”中看到

上面就是我添加到 Visual Studio 中的與 MySql 資料庫的串連,

上面完成了以後呢,您便可以很方便的使用 SqlDataSource 來訪問 MySql 資料庫了,

當然咯,上面是通過設定來完成的,而下面呢,

我還寫了一個 Demo 來完成使用代碼來訪問 MySql 資料庫,

我呢,將會使用到上面的資料庫 blogs 中的資料表 BlogsUsers,事實上呢,

我這個資料表就是用來儲存使用者的,其中包括的欄位描述如下

下面就直接來看這個 Demo 的效果吧,完了之後再來看代碼,

上面呢,也就是註冊一個使用者,註冊成功後,

再來看 MySql 資料庫中的資料,驗證剛才的註冊是否成功!!!

這裡就表明插入資料成功了!!!

要想在 Demo 的代碼中使用 .NET Connector 提供的一些類來完成對 MySql 的訪問,

您還必須做如下的一些操作,

就是要添加一個引用,

上面的這個引用的組件呢是隨著 .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 中的標誌參數都是不同的,值得注意一下!!!

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.