博文介紹的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); } }
