Microsoft Access數據庫操作類(C#)


博文介紹的Microsoft Access數據庫操作類是C#語言的,可實現對Microsoft Access數據庫的增刪改查詢等操作。並且該操作類可實現對圖片的存儲,博文的最后附上如何將Image圖片轉換為byte[]數組類型,以及如何將byte[]數組類型轉換為Image圖片。

       博文中會貼出該類的下載地址,可以直接下載使用。

        注:操作Microsoft Access數據庫需要安裝Microsoft Office Access DataBase Engine,可以直接去微軟的官網下載。

1. AccessOperate類

using System.Data;
using System.Data.OleDb;

//C#的Microsoft Access操作類
public class AccessOperate
{
    private string OleDbConnectionString;    //數據庫連接

    /// <summary>
    /// 構造函數
    /// 初始化連接數據庫參數
    /// </summary>
    public AccessOperate()
    {
        //Microsoft Access2003的連接語句
    //OleDbConnectionString = "Provider = Microsoft.ACE.OLEDB.4.0;Data Source=.\\Data\\DataBaseName.mdb;Jet OLEDB:Database Password=123456";
    //Microsoft Access2007及以上的連接語句
    OleDbConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=.\\Data\\DataBaseName.accdb;Jet OLEDB:Database Password=123456";
    }

    /// <summary>
    /// 構造函數
    /// 初始化連接數據庫參數
    /// </summary>
    /// <param name="ConSqlServer">連接對象</param>
    public AccessOperate(string ConSqlServer)
    {
        OleDbConnectionString = ConSqlServer;
    }

    /// <summary>
    /// 打開數據庫連接
    /// </summary>
    /// <param name="cnn">連接</param>
    public void Open(OleDbConnection cnn)
    {
        if (cnn.State == ConnectionState.Closed)
        {
            cnn.Open();
        }
    }

    /// <summary>
    /// 關閉數據庫連接
    /// </summary>
    /// <param name="cnn">連接</param>
    public void Close(OleDbConnection cnn)
    {
        if (cnn != null)
        {
            if (cnn.State == ConnectionState.Open)
            {
                cnn.Close();
            }
            cnn.Dispose();
        }
    }

    /// <summary>
    /// 查詢
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <returns>是否存在</returns>
    public bool ChaXun(string strSql)
    {
        OleDbConnection cnn = new OleDbConnection(OleDbConnectionString);
        OleDbCommand cmd = new OleDbCommand();
        try
        {
            Open(cnn);
            cmd = new OleDbCommand(strSql, cnn);
            return cmd.ExecuteReader().Read();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            cmd.Dispose();
            Close(cnn);
        }
    }

    /// <summary>
    /// 查詢
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <returns>第一行第一列結果</returns>
    public string ChaXun2(string strSql)
    {
        OleDbConnection cnn = new OleDbConnection(OleDbConnectionString);
        OleDbCommand cmd = new OleDbCommand();
        try
        {
            Open(cnn);
            cmd = new OleDbCommand(strSql, cnn);
            return cmd.ExecuteScalar().ToString().Trim();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            cmd.Dispose();
            Close(cnn);
        }
    }

    /// <summary>
    /// 查詢(OleDbDataReader)
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <returns>查詢結果</returns>
    public OleDbDataReader GetDR(string strSql)
    {
        OleDbConnection cnn = new OleDbConnection(OleDbConnectionString);
        OleDbCommand cmd = new OleDbCommand();
        try
        {
            Open(cnn);
            cmd = new OleDbCommand(strSql, cnn);
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            cmd.Dispose();
        }
    }

    /// <summary>
    /// 查詢(DataSet)
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <returns>查詢結果</returns>
    public DataSet GetDS(string strSql)
    {
        OleDbConnection cnn = new OleDbConnection(OleDbConnectionString);
        OleDbDataAdapter sda = new OleDbDataAdapter();
        try
        {
            Open(cnn);
            sda = new OleDbDataAdapter(strSql, cnn);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            return ds;
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            sda.Dispose();
            Close(cnn);
        }
    }

    /// <summary>
    /// 查詢(DataSet)
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <param name="tableName">指定DataSet["tableName"]表</param>
    /// <returns>查詢結果</returns>
    public DataSet GetDS(string strSql, string tableName)
    {
        OleDbConnection cnn = new OleDbConnection(OleDbConnectionString);
        OleDbDataAdapter sda = new OleDbDataAdapter();
        try
        {
            Open(cnn);
            sda = new OleDbDataAdapter(strSql, cnn);
            DataSet ds = new DataSet();
            sda.Fill(ds, tableName);
            return ds;
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            sda.Dispose();
            Close(cnn);
        }
    }

    /// <summary>
    /// 查詢(DataTable)
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <returns>查詢結果</returns>
    public DataTable GetDT(string strSql)
    {
        return GetDS(strSql).Tables[0];
    }

    /// <summary>
    /// 查詢(DataView)
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <returns>查詢結果</returns>
    public DataView GetDV(string strSql)
    {
        return GetDS(strSql).Tables[0].DefaultView;
    }

    /// <summary>
    /// 增刪改,無圖片
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <returns>影響的行數</returns>
    public int RunSql(string strSql)
    {
        OleDbConnection cnn = new OleDbConnection(OleDbConnectionString);
        OleDbCommand cmd = new OleDbCommand();
        try
        {
            Open(cnn);
            cmd = new OleDbCommand(strSql, cnn);
            return cmd.ExecuteNonQuery();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            cmd.Dispose();
            Close(cnn);
        }
    }

    /// <summary>
    /// 增改,有圖片
    /// </summary>
    /// <param name="strSql">SQL語句</param>
    /// <param name="picbyte">圖片的二進制數據</param>
    /// <returns>影響的行數</returns>
    public int RunSql(string strSql, byte[] picbyte)
    {
        OleDbConnection cnn = new OleDbConnection(OleDbConnectionString);
        OleDbCommand cmd = new OleDbCommand();
        try
        {
            Open(cnn);
            cmd = new OleDbCommand(strSql, cnn);
            cmd.Parameters.AddWithValue("@Image", SqlDbType.Image);
            cmd.Parameters["@Image"].Value = picbyte;
            return cmd.ExecuteNonQuery();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }
        finally
        {
            cmd.Dispose();
            Close(cnn);
        }
    }
}

2. Image圖片與byte[]數組的相互轉換

using System.Drawing;
using System.IO;
using System.Drawing.Imaging;

// 將Image轉換為二進制序列
public static byte[] ImageToBytes(Image image)
{
    MemoryStream ms = new MemoryStream();
    image.Save(ms, ImageFormat.Jpeg);
    byte[] bytes = new Byte[ms.Length];
    ms.Position = 0;
    ms.Read(bytes, 0, bytes.Length);
    ms.Close();
    return bytes;
}

// 將二進制序列轉換為Image
public static Image BytesToImage(byte[] bytes)
{
    try
    {
        using (Stream fStream = new MemoryStream(bytes.Length))
        {
            BinaryWriter bw = new BinaryWriter(fStream);
            bw.Write(bytes);
            bw.Flush();
            Bitmap bitMap = new Bitmap(fStream);
            bw.Close(); 
            fStream.Close();
            Image image = Image.FromHbitmap(bitMap.GetHbitmap());
            return image;
        }
    }
    catch (IOException ex)
    {
        throw new Exception("讀取圖片失敗:" + ex.Message);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM