分享

[原创]封装使用MySQLDriverCS在ASP.NET中访问MySQL的类

 悟静 2011-12-29

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;

using MySQLDriverCS;
using System.IO;

/// <summary>
/// MySQLHelper 的摘要说明
/// 封装使用MySQLDriverCS在ASP.NET中访问MySQL数据库的基本功能
///
/// 使用这个类前先确认解决方案中添加了对MySQLDriverCS.dll的引用
/// </summary>

/*
* 使用示例:
    protected void bindGridView()
    {
        MySQLHelper hlp = new MySQLHelper();
        MySQLCommand cmd = hlp.GetCommand("select * from tablename");
        hlp.OpenConnection();
        DataTable dt = MySQLHelper.GetTableFromCommand(cmd);
        hlp.CloseConnection();

        GridView1.DataSource = dt;
        GridView1.DataBind();
    }
*/

public class MySQLHelper
{
    private MySQLConnection _conn;

    /// <summary>
    /// 默认从web.config中读出
    /// </summary>

    public MySQLHelper()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
        MySQLConnectionString strConn = new MySQLConnectionString(
                ConfigurationManager.AppSettings["server"].ToString(),
                ConfigurationManager.AppSettings["dbName"].ToString(),
                ConfigurationManager.AppSettings["user"].ToString(),
                ConfigurationManager.AppSettings["password"].ToString()
                );
        this._conn = new MySQLConnection(strConn.AsString);
    }


    /// <summary>
    /// 用无参构造后,以此函数建立连接
    /// </summary>
    /// <param name="ip">服务器地址</param>
    /// <param name="dbName">数据库名</param>
    /// <param name="user">用户名</param>
    /// <param name="password">密码</param>

    public void Connect(string server, string dbName, string user, string password)
    {
        this._conn = new MySQLConnection(new MySQLConnectionString(server, dbName, user, password).AsString);
    }


    /// <summary>
    ///构造函数,以建立连接
    /// </summary>
    /// <param name="ip">服务器地址</param>
    /// <param name="dbName">数据库名</param>
    /// <param name="user">用户名</param>
    /// <param name="password">密码</param>

    public MySQLHelper(string sever, string dbName, string user, string password)
    {
        this.Connect(sever, dbName, user, password);
    }


    /// <summary>
    /// 打开连接,并解决乱码问题
    /// </summary>
    /// <returns>true:打开成功 false:打开失败</returns>

    public bool OpenConnection()
    {
        try
        {
            this._conn.Open();
        }
        catch (MySQLException mse)
        {
            //不成功设_conn为null
            //在其他函数里将先判断_conn
            this._conn = null;
            WriteIntoLog(mse.ToString());
            return false;
        }
        //防止乱码
        MySQLCommand commn = new MySQLCommand("set names gb2312", this._conn);
        commn.ExecuteNonQuery();
        return true;
    }


    /// <summary>
    /// 关闭链接
    /// </summary>

    public void CloseConnection()
    {
        try
        {
            this._conn.Close();
        }
        catch (MySQLException mse)
        {
            WriteIntoLog(mse.ToString());
        }
    }


    /// <summary>
    /// 执行SQL语句,不需要Open,Close Connection
    /// </summary>
    /// <param name="sqlText">SQL语句</param>
    /// <returns>受影响行数,异常返回 -1</returns>   

    public int ExecuteNonQuery(string sqlText)
    {
        if (this._conn == null) return -1;
        int temp = -1;
        try
        {
            MySQLCommand cmd = new MySQLCommand(sqlText, this._conn);
            this._conn.Open();
            //防止乱码
            MySQLCommand commn = new MySQLCommand("set names gb2312", this._conn);
            commn.ExecuteNonQuery();
            temp = cmd.ExecuteNonQuery();
            this._conn.Close();
        }
        catch (MySQLException mse)
        {
            WriteIntoLog(mse.ToString());
        }
        return temp;
    }


    /// <summary>
    /// 执行sql语句,不需要Open,Close Connection
    /// </summary>
    /// <param name="sqlText">要执行sql语句</param>
    /// <returns>结果的第一行的第一列,异常返回null</returns>

    public object ExecuteScalar(string sqlText)
    {
        if (this._conn == null) return null;
        object temp = null;
        try
        {
            MySQLCommand cmd = new MySQLCommand(sqlText, this._conn);
            this._conn.Open();
            //防止乱码
            MySQLCommand commn = new MySQLCommand("set names gb2312", this._conn);
            commn.ExecuteNonQuery();
            temp = cmd.ExecuteScalar();
            this._conn.Close();
        }
        catch (MySQLException mse)
        {
            WriteIntoLog(mse.ToString());
        }
        return temp;
    }


    /// <summary>
    /// 返回一个MySQLCommand
    /// 一般用于需要参数化执行SqlCommand的场所
    /// </summary>
    /// <param name="sqlText">带参数的sql语句</param>
    /// <returns>MySQLCommand</returns>

    public MySQLCommand GetCommand(string sqlText)
    {
        return new MySQLCommand(sqlText, this._conn);
    }


    /// <summary>
    /// 执行一个Command返回DataTable
    /// 但数据库中text的列不能显示出来(GetTableFromReader不奏效)
    /// 需要另外查询
    /// </summary>
    /// <param name="cmd">要执行的MySQLCommand</param>
    /// <returns>结果DataTable</returns>

    public static DataTable GetTableFromCommand(MySQLCommand cmd)
    {
        DataTable dt;
        try
        {
            dt = GetTableFromReader(cmd.ExecuteReaderEx());
        }
        catch (MySQLException mse)
        {
            WriteIntoLog(mse.ToString());
            return null;
        }
        return dt;
    }


    /// <summary>
    /// 从MySQLDataReader转换到DataTable
    /// </summary>
    /// <param name="reader">现成的MySQLDataReader</param>
    /// <returns>DataTable</returns>

    public static DataTable GetTableFromReader(MySQLDataReader reader)
    {
        if (reader == null) return null;

        DataTable objDataTable = new DataTable();
        int intFieldCount = reader.FieldCount;

        //为DataTable对象添加对应的列字段信息
        for (int intCounter = 0; intCounter < intFieldCount; ++intCounter)
        {
            objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter));
        }

        objDataTable.BeginLoadData();
        object[] objValues = new object[intFieldCount];

        //逐行读取SqlDataReader对象中每一行数据
        //并把数据添加到对象dataTable中
        while (reader.Read())
        {
            reader.GetValues(objValues);
            objDataTable.LoadDataRow(objValues, true);
        }

        ///关闭数据读取器
        reader.Close();
        objDataTable.EndLoadData();
        return objDataTable;
    }

    /// <summary>
    /// 把异常信息写入日志
    /// </summary>
    /// <param name="strExp">要写入的异常信息</param>

    private static void WriteIntoLog(string strExp)
    {
        try
        {
            FileStream fs = new FileStream(
                ConfigurationManager.AppSettings["logpath"].ToString(),
                FileMode.Append);
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(DateTime.Now);
            sw.Write(strExp + "\r\n\r\n");
            sw.Flush();
            sw.Close();
        }
        catch (IOException exp)
        {
            return;
        }
    }
}

web.config中的内容:

<appSettings>
    <!--数据库连接信息-->
    <add key="server" value="127.0.0.1"/>
    <add key="dbName" value="nameofDB"/>
    <add key="user" value="root"/>
    <add key="password" value="123456"/>
    <!--数据库异常日志路径-->
    <add key="logpath" value="D:\MyDocument\exception.txt"/>
</appSettings>


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多