看到CSDN上不斷兄弟姐妹提問關於c#操作Access的問題,於是本人利用閑暇將c#操作Access的方法加以總結,主要解決的問題有:
建立mdb
建立table
讀取table內容
查詢table中的內容
向table中插入資料
刪除table中的記錄
向table中插入照片
讀取table中的照片等。
另:本人水平有限,不當之處還請斧正。廢話少說,開始正題。
文介紹C#訪問操作Access資料庫的基礎知識,並提供一個相關的常式。C#的ADO.NET還不能通過編程方式建立全新的ACCESS(MDB)資料庫,所以還只能使用ADOX這個來自COM的連結庫來操作。
主要知識點如下:
using System.Data.OleDb;
using System.Data;
連接字串:String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=product.mdb";
建立串連:OleDbConnection connection = new OleDbConnection(connectionString);
使用OleDbCommand類來執行Sql語句:
OleDbCommand cmd = new OleDbCommand(sql, connection);
connection.Open();
cmd.ExecuteNonQuery();
1.建立mdb庫,常式如下:
需要注意的是:參數mdbPath是mdb的完整路徑(不包含表的名稱)。例如:D://test.mdb
//建立mdb<br /> public static bool CreateMDBDataBase(string mdbPath)<br /> {<br /> try<br /> {<br /> ADOX.CatalogClass cat = new ADOX.CatalogClass();<br /> cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";");<br /> cat = null;<br /> return true;<br /> }<br /> catch { return false; }<br /> }<br />
2.建立具體的表,常式如下:
通常一個mdb的可以包含n個表。下面的程式主要是建立一個table。
//建立mdb的表<br /> //mdbHead是一個ArrayList,儲存的是table表中的具體列名。<br /> public static bool CreateMDBTable(string mdbPath,string tableName, ArrayList mdbHead)<br /> {<br /> try<br /> {<br /> ADOX.CatalogClass cat = new ADOX.CatalogClass();<br /> string sAccessConnection<br /> = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath;<br /> ADODB.Connection cn = new ADODB.Connection();<br /> cn.Open(sAccessConnection, null, null, -1);<br /> cat.ActiveConnection = cn;</p><p> //建立一個表<br /> ADOX.TableClass tbl = new ADOX.TableClass();<br /> tbl.ParentCatalog = cat;<br /> tbl.Name = tableName;</p><p> int size = mdbHead.Count;<br /> for (int i = 0; i < size; i++)<br /> {<br /> //增加一個文字欄位<br /> ADOX.ColumnClass col2 = new ADOX.ColumnClass();<br /> col2.ParentCatalog = cat;<br /> col2.Name = mdbHead[i].ToString();//列的名稱<br /> col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;<br /> tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarWChar, 500);<br /> }<br /> cat.Tables.Append(tbl); //這句把表加入資料庫(非常重要)<br /> tbl = null;<br /> cat = null;<br /> cn.Close();<br /> return true;<br /> }<br /> catch { return false; }<br /> }
3.讀取mdb內容(完全讀取),常式如下:
本常式返回的是一個DataTable,如需其他格式可以自行轉換。
// 讀取mdb資料<br /> public static DataTable ReadAllData(string tableName, string mdbPath,ref bool success)<br /> {<br /> DataTable dt = new DataTable();<br /> try<br /> {<br /> DataRow dr;<br /> //1、建立串連<br /> string strConn<br /> = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";<br /> OleDbConnection odcConnection = new OleDbConnection(strConn);<br /> //2、開啟串連<br /> odcConnection.Open();<br /> //建立SQL查詢<br /> OleDbCommand odCommand = odcConnection.CreateCommand();<br /> //3、輸入查詢語句<br /> odCommand.CommandText = "select * from " + tableName;<br /> //建立讀取<br /> OleDbDataReader odrReader = odCommand.ExecuteReader();<br /> //查詢並顯示資料<br /> int size = odrReader.FieldCount;<br /> for (int i = 0; i < size; i++)<br /> {<br /> DataColumn dc;<br /> dc = new DataColumn(odrReader.GetName(i));<br /> dt.Columns.Add(dc);<br /> }<br /> while (odrReader.Read())<br /> {<br /> dr = dt.NewRow();<br /> for (int i = 0; i < size; i++)<br /> {<br /> dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString();<br /> }<br /> dt.Rows.Add(dr);<br /> }<br /> //關閉串連<br /> odrReader.Close();<br /> odcConnection.Close();<br /> success = true;<br /> return dt;<br /> }<br /> catch<br /> {<br /> success = false;<br /> return dt;<br /> }<br /> }
4.讀取mdb內容(按列讀取),常式如下:
columns數組儲存的是你要查詢的列名稱(必須確保mdb表中存在你要的列)
// 讀取mdb資料<br /> public static DataTable ReadDataByColumns(string mdbPaht,string tableName, string[] columns, ref bool success)<br /> {<br /> DataTable dt = new DataTable();<br /> try<br /> {<br /> DataRow dr;<br /> //1、建立串連<br /> string strConn<br /> = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";<br /> OleDbConnection odcConnection = new OleDbConnection(strConn);<br /> //2、開啟串連<br /> odcConnection.Open();<br /> //建立SQL查詢<br /> OleDbCommand odCommand = odcConnection.CreateCommand();<br /> //3、輸入查詢語句<br /> string strColumn = "";<br /> for (int i = 0; i < columns.Length; i++)<br /> {<br /> strColumn += columns[i].ToString() + ",";<br /> }<br /> strColumn = strColumn.TrimEnd(',');<br /> odCommand.CommandText = "select "+strColumn+" from " + tableName;<br /> //建立讀取<br /> OleDbDataReader odrReader = odCommand.ExecuteReader();<br /> //查詢並顯示資料<br /> int size = odrReader.FieldCount;<br /> for (int i = 0; i < size; i++)<br /> {<br /> DataColumn dc;<br /> dc = new DataColumn(odrReader.GetName(i));<br /> dt.Columns.Add(dc);<br /> }</p><p> while (odrReader.Read())<br /> {<br /> dr = dt.NewRow();<br /> for (int i = 0; i < size; i++)<br /> {<br /> dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString();<br /> }<br /> dt.Rows.Add(dr);<br /> }<br /> //關閉串連<br /> odrReader.Close();<br /> odcConnection.Close();<br /> success = true;<br /> return dt;<br /> }<br /> catch<br /> {<br /> success = false;<br /> return dt;<br /> }<br /> }<br />
今天就簡單寫到這裡,以後我會將內容補充完整。
補充一句:轉載的朋友請一定註明出處謝謝!半支煙阿傑 http://blog.csdn.net/gisfarmer/