1. 程式人生 > >Asp.net通過MySql.Data.dll操作mysql資料庫(一)

Asp.net通過MySql.Data.dll操作mysql資料庫(一)

在Asp.net 中,可以通過MySql.Data.dll來操作mysql資料庫,寫法跟操作SQL資料庫類似,下面是相關的例子。

一、開啟mysql資料庫:

   MySqlConnection DBConn = new MySqlConnection();
   string connString ="Host=127.0.0.1;UserName=root;Password=root;Database=test;Port=3306;CharSet=utf8;Allow Zero Datetime=true";
   DBConn.ConnectionString = connString;
   DBConn.Open();

二、執行sql命令

   string sqlstr="select * from test";
   MySqlCommand command = new MySqlCommand(sqlstr, DBConn);
   command.ExecuteNonQuery();

從上面可以看出,用法跟操作SQL資料庫的SqlConnection、SqlCommand非常相似,

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="MySql.Data.MySqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>shouji138.com MYSQL Manager (DoNet)</title>
    <style type="text/css">
body,

<script runat="server">
    private string m_Admin = "shouji138.com";   
    MySqlConnection DBConn = new MySqlConnection();
    private string connString = string.Empty;
    DataTable tblsDt = null;
    int tblRowsCount = 0;
    int tblsCount = 0;
    float tblDbSize = 0f;
    
    private bool OpenData()
    {
        if (Session["dbhost"] != null
            && Session["dbuser"] != null
            && Session["dbpass"] != null
            && Session["dbname"] != null
            && Session["dbport"] != null
            && Session["charset"] != null

            && Session["dbhost"].ToString().Trim() != string.Empty
            && Session["dbuser"].ToString().Trim() != string.Empty
            && Session["dbpass"].ToString().Trim() != string.Empty
            && Session["dbname"].ToString().Trim() != string.Empty
            && Session["dbport"].ToString().Trim() != string.Empty
            && Session["charset"].ToString().Trim() != string.Empty

            )
        {
            connString = string.Format("Host = {0}; UserName = {1}; Password = {2}; Database = {3}; Port = {4};CharSet={5};Allow Zero Datetime=true",
                      Session["dbhost"].ToString().Trim(),
                       Session["dbuser"].ToString().Trim(),
                       Session["dbpass"].ToString().Trim(),
                       Session["dbname"].ToString().Trim(),
                       Session["dbport"].ToString().Trim(),
                       Session["charset"].ToString().Trim()
                      );
        }
        if (connString != string.Empty && DBConn.State != ConnectionState.Open)
        {
            DBConn.ConnectionString = connString;
            try
            {
                DBConn.Open();
            }
            catch (Exception ex)
            {
                Response.Write("資料庫連線失敗,請檢查連線字串!" + ex.Message);
                return false;
            }
            return true;
        }
        return false;
    }
    private void CloseData()
    {
        DBConn.Close();
    }

    private string FindPK(string tablename)
    {
        string PKName = string.Empty;
        DataTable dt = RunTable("SHOW KEYS FROM " + tablename);
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (dt.Rows[i]["Key_name"].ToString().ToUpper() == "PRIMARY")
            {
                PKName = dt.Rows[i]["Column_name"].ToString();
                break;
            }
        }
        return PKName;
    }

    private DataTable RunTable(string sqlstr)
    {
        DataTable data = new DataTable();
        MySqlDataAdapter da = new MySqlDataAdapter();
        try
        {
            OpenData();

            da.SelectCommand = new MySqlCommand(sqlstr, DBConn);
            da.Fill(data);
        }
        catch (Exception ex)
        {
            Response.Write("執行SQL錯誤:" + ex.Message + "<br>SQL:" + sqlstr);
            Response.End();
        }
        finally
        {
            da.Dispose();
            DBConn.Close();
        }
        return data;
    }
    private void ShowAllTable()
    {
        string sqlstr = "SHOW TABLE STATUS";
        tblsDt = RunTable(sqlstr);
        PanTables.Visible = true;
        tblRun.Visible = true;
    }

    private DataTable TableColumn(string tablename)
    {
        return RunTable("SHOW COLUMNS FROM " + tablename);
    }

    private DataTable TableStructure(string tablename)
    {
        return RunTable("SHOW FIELDS FROM " + tablename);
    }

    private bool isAuto_increment(string tblname, string columnname)
    {
        DataTable table = TableStructure(tblname);
        bool boolIs = false;
        for (int i = 0; i < table.Rows.Count; i++)
        {
            if (table.Rows[i]["Field"].ToString().ToUpper() == columnname.ToUpper())
            {
                if (table.Rows[i]["Extra"].ToString().ToLower() == "auto_increment")
                {
                    boolIs = true;
                    break;
                }
            }
        }
        return boolIs;
    }
    private void ShowTableData()
    {
        PanShow.Visible = true;
        tblRun.Visible = true;
        sql_query.Value = "SELECT * FROM " + Request.QueryString["tblname"] + " LIMIT 0, 30";
    }


    private void ShowEditeData()
    {
        PanelEdit.Visible = true;
        tblRun.Visible = true;
        sql_query.Value = "SELECT * FROM " + Request.QueryString["tblname"] + " LIMIT 0, 30";
    }

    private void Structure()
    {
        PanelStructure.Visible = true;
        tblRun.Visible = true;
        sql_query.Value = "SELECT * FROM " + Request.QueryString["tblname"] + " LIMIT 0, 30";
    }

    private void InsertData()
    {
        PanelInsert.Visible = true;
        tblRun.Visible = true;
        sql_query.Value = "SELECT * FROM " + Request.QueryString["tblname"] + " LIMIT 0, 30";
    }
    private void ExportSucc()
    {
        ShowAllTable();
        if (Session["exportinfo"] != null && Session["exportinfo"].ToString()!=string.Empty)
        {
            lblExport.Text = Session["exportinfo"].ToString();
            divSucc.Visible = true;
            Session["exportinfo"] = null;
        }
       
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["login"] == null || Session["login"].ToString().Length < 1)
        {
            PanelLogin.Visible = true;
        }
        else
        {
            PanelSucc.Visible = true;
        }
        
        if (!Page.IsPostBack)
        {
            txtpassword.Attributes.Add("onkeydown", "SubmitKeyClick('btnLogin');");
            InitFrm();

            if (OpenData())
            {
                ShowDBs();
                if (Request.QueryString["action"] != null)
                {
                    switch (Request.QueryString["action"].ToString())
                    {
                        case "show":
                            ShowTableData();
                            break;
                        case "edit":
                            ShowEditeData();
                            break;
                        case "deldata":
                            deldataData();
                            break;
                        case "insert":
                            InsertData();
                            break;
                        case "structure":
                            Structure();
                            break;
                        case "droptable":
                            DropTable();
                            break;
                        case "exportsucc":
                            ExportSucc();
                            break;
                    }
                }
                else
                {
                    ShowAllTable();
                }
            }
        }
        ShowConnForm();
    }
    private void InitFrm()
    {
        if (Session["dbhost"] != null)
            dbhost.Value = Session["dbhost"].ToString();

        if (Session["dbuser"] != null)
            dbuser.Value = Session["dbuser"].ToString();

        if (Session["dbpass"] != null)
            dbpass.Value = Session["dbpass"].ToString();

        if (Session["dbname"] != null)
            dbname.Value = Session["dbname"].ToString();

        if (Session["dbport"] != null)
            dbport.Value = Session["dbport"].ToString();

        if (Session["charset"] != null)
        {
            charset.SelectedIndex = -1;
            charset.Items.FindByValue(Session["charset"].ToString()).Selected = true;
        }
           //value="<%=Server.MapPath("MySQL.sql") %>"
        txtSavePath.Value = Server.MapPath(Request.ServerVariables["HTTP_HOST"].Replace(".", "").Replace(":", "") + "MySQL.sql");
    }

    private void ShowConnForm()
    {
        PanFrm.Visible = true;
    }

    protected void connect_ServerClick(object sender, EventArgs e)
    {
        connString = string.Format("Host = {0}; UserName = {1}; Password = {2}; Database = {3}; Port = {4};CharSet={5};Allow Zero Datetime=true",
            dbhost.Value.Trim(),
            dbuser.Value.Trim(),
            dbpass.Value.Trim(),
            dbname.Value.Trim(),
            dbport.Value.Trim(),
            charset.Value.Trim()
            );
        Session["dbhost"] = dbhost.Value.Trim();
        Session["dbuser"] = dbuser.Value.Trim();
        Session["dbpass"] = dbpass.Value.Trim();
        Session["dbname"] = dbname.Value.Trim();
        Session["dbport"] = dbport.Value.Trim();
        Session["charset"] = charset.Value.Trim();
        if (OpenData())
        {
            ShowDBs();
            //ShowAllTable();
        }
    }

    private string showSize(float size)
    {
        if (size > 1024 * 1024)
        {
            return Math.Round(size / (1024 * 1024), 3) + "M";
        }
        else if (size > 1024)
        {
            return Math.Round(size / 1024, 3) + "K";
        }
        else
        {
            return size + "B";
        }
    }

    protected void Submit1_ServerClick(object sender, EventArgs e)
    {
        if (sql_query.Value.Trim() != string.Empty)
        {
            if (OpenData())
            {
                PanelQuery.Visible = true;
            }
        }
        else
        {
            Response.Redirect(Request.ServerVariables["HTTP_REFERER"] + "", true);
        }
    }

    protected void Submit2_ServerClick(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();
        string tblname = Request.QueryString["tblname"].Trim();

        DataTable dt = TableColumn(tblname);
        sb.Append(" update `" + tblname + "` set  ");

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (i != 0)
                sb.Append(",");
            sb.Append("`" + dt.Rows[i][0].ToString().Trim() + "`=");
            string columntype = dt.Rows[i][1].ToString().Trim();
            bool mustAdd = false;
            if (columntype.IndexOf("char") != -1 || columntype.IndexOf("datetime") != -1 || columntype.IndexOf("string") != -1)
            {
                mustAdd = true;
            }
            if (mustAdd)
            {
                sb.Append("'");
            }
            sb.Append(Request.Form["insertsql_" + dt.Rows[i][0].ToString().Trim().Replace("'", "''")]);
            if (mustAdd)
            {
                sb.Append("'");
            }
        }
        sb.Append(" where " + Request.QueryString["pk"].ToString() + " = " + Request.QueryString["v"].ToString() + "");
        string sql = sb.ToString();
        RunTable(sql);
        Response.Redirect(Request.ServerVariables["Script_Name"] + "?action=show&tblname=" + tblname, true);
    }

    private void deldataData()
    {
        StringBuilder sb = new StringBuilder();
        string tblname = Request.QueryString["tblname"].Trim();

        sb.Append(" delete from  `" + tblname + "`   ");

        sb.Append(" where " + Request.QueryString["pk"].ToString() + " = " + Request.QueryString["v"].ToString() + "");
        string sql = sb.ToString();
        RunTable(sql);
        Response.Redirect(Request.ServerVariables["Script_Name"] + "?action=show&tblname=" + tblname, true);
    }

    private void ShowDBs()
    {
        string sql = "SHOW DATABASES";

        seldbname.DataSource = new DataTable();
        seldbname.DataBind();
        
        ListItem item = new ListItem("選擇資料庫", "");
        seldbname.Items.Add(item);

        DataTable dt = RunTable(sql);
        for (int i = 0; i < dt.Rows.Count; i++)
        { 
            string dname = dt.Rows[i][0].ToString();
            if (dname != "information_schema")
            {
                seldbname.Items.Add(new ListItem(dname, dname));
            }
        }
        
    }

    private void DropTable()
    {
        StringBuilder sb = new StringBuilder();
        string tblname = Request.QueryString["tblname"].Trim();

        sb.Append(" drop table `" + tblname + "`   ");

        string sql = sb.ToString();
        RunTable(sql);
        Response.Redirect(Request.ServerVariables["Script_Name"], true);
    }
    protected void btninsert_ServerClick(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();
        string tblname = Request.QueryString["tblname"].Trim();

        DataTable dt = TableColumn(tblname);
        sb.Append(" insert into  `" + tblname + "` (  ");

        int m = 0;
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (!isAuto_increment(tblname, dt.Rows[i][0].ToString()))
            {
                m++;
                if (m != 1)
                    sb.Append(",");
                sb.Append("`" + dt.Rows[i][0].ToString().Trim() + "`");
            }
        }
        sb.Append(" ) values (");
        m = 0;
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (!isAuto_increment(tblname, dt.Rows[i][0].ToString()))
            {
                m++;
                if (m != 1)
                    sb.Append(",");

                string columntype = dt.Rows[i][1].ToString().Trim();
                bool mustAdd = false;
                if (columntype.IndexOf("char") != -1 || columntype.IndexOf("datetime") != -1 || columntype.IndexOf("string") != -1)
                {
                    mustAdd = true;
                }
                if (mustAdd)
                {
                    sb.Append("'");
                }
                sb.Append(Request.Form["insertsql_" + dt.Rows[i][0].ToString().Trim().Replace("'", "''")]);
                if (mustAdd)
                {
                    sb.Append("'");
                }
            }
        }
        sb.Append(" ) ");
        string sql = sb.ToString();

        Response.Write(sql);
        RunTable(sql);
        Response.Redirect(Request.ServerVariables["Script_Name"] + "?action=show&tblname=" + tblname, true);
    }

    protected void seldbname_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["dbname"] = seldbname.Items[seldbname.SelectedIndex].Value.ToString().Trim();
        Response.Redirect(Request.ServerVariables["Script_Name"] + "", true);
    }

    protected void btnLogin_Click(object sender, EventArgs e)
    {
        if (txtpassword.Value.Trim() == m_Admin)
        {
            Session["login"] = "login";
            Response.Redirect(Request.ServerVariables["Script_Name"] + "", true);
        }
    }