Access之C#連接Access


如果是個人用的小程序的話。一般都推薦用Sqlite和Access

使用SQlite數據庫需要安裝SQLite驅動,詳情:SQLite之C#連接SQLite

同樣要使用Access數據庫一必須安裝Access驅動程序。驅動下載:http://pan.baidu.com/s/1moWje

官網下載:http://www.microsoft.com/zh-cn/download/details.aspx?id=13255

可以在收索你需要的版本。

 

微軟ADO.NET數據提供程序

數據提供程序 命名空間 程序集
OLE DB System.Data.OleDb System.Data.dll
Microsoft SQL Server System.Data.SqlClient System.Data.dll
Microsoft.SQL Server Mobile System.Data.SqlServerCe System.Data.SqlServerCe.dll
ODBC System.Data.Odbc System.Data.dll

 

 

沒有特定的數據提供程序直接映射到Jet引擎(比如微軟的Access數據庫),如果要和Acces數據文件交互,可以使用OLE DB數據提供程序或者ODBC數據提供程序。

由定義在System.Data.OleDb命名空間下的類組成的OLE DB 數據提供程序能讓你訪問所有支持基於傳統COM的OLD DB協議的數據庫,使用這個數據庫提供程序,能非常簡單地改變連接字符串中的“provider”,並能和各種OLE DB數據庫進行通信。

 

如果你安裝了微軟的office。那么也安裝了Access數據庫,現在我們來一步一步完成對Access數據庫的訪問

打開Access數據庫,選擇創建數據庫。選擇保存路徑和取名,單擊創建即可

 

 

然后的界面就很熟悉了

 

 單擊 "單擊以添加" 可以選擇數據類型

選擇類型后。比如這里選擇文本類型。就可以輸入字段名稱

 

 

這里你會看到前面有一個默認的列ID。默認是主鍵。自增的。你可以選擇當前列。在屬性中看到,當然。你也可以改變當前字段的數據類型

 

 

 

為了簡化操作,我這里只創建3個字段用於測試

字段名稱 字段類型 字段說明
name string 姓名
age int 年齡
crateDate DateTime 添加時間(默認值是當天)

 

創建時間createDate需要設置默認值,選擇createDate列,在屬性部分。單擊默認值。輸入Now(),確定即可。還可以設置表達式格式。可以自己去看

 

 

 

創建完成后。ctrl+s保存。輸入表名稱user,確定

現在創建一個控制台程序。來連接Access

添加引用:System.Data.dll,

添加命名空間:using System.Data.OleDb;

 

為了方便。把數據庫拷貝到項目的Debug目錄下面,編寫測試代碼

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Data.OleDb; //引入命名空間 需要添加引用 System.Data.dll
 6 
 7 namespace ConsoleApplication2
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //連接Access字符串
14             string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=userInfo.accdb;Persist Security Info=False";
15 
16             //插入數據
17             string name = "張三";
18             int age = 18;
19 
20             string sql = "insert into user(name,age)values(@name,@age)";
21             OleDbParameter[] para = { 
22                                         new OleDbParameter("@name",OleDbType.VarChar),
23                                         new OleDbParameter("@age",OleDbType.Integer),
24                                         /*
25                                          * 我不知道這樣寫有什么區別,除了更簡單還有什么好處
26                                            new OleDbParameter("@age",age)
27                                          */
28                                     };
29             para[0].Value = name;
30             para[1].Value = age;
31 
32             int rows = 0;
33 
34             using (OleDbConnection connect = new OleDbConnection(conStr))
35             {
36                 using (OleDbCommand cmd = new OleDbCommand(sql, connect))
37                 {
38                     if (para != null && para.Length > 0) cmd.Parameters.AddRange(para);
39 
40                     if (connect.State == System.Data.ConnectionState.Closed) connect.Open();
41 
42                     rows = cmd.ExecuteNonQuery();
43                 }
44             }
45 
46             if (rows > 0) Console.WriteLine("插入成功");
47             Console.ReadLine();
48         }
49     }
50 }

 

 

運行后提示錯誤:

 

仔細看sql語句是不是沒有錯誤的語法。再仔細想想呢?對,user是關鍵字,需要加用[]包裹。像這樣:[user]

string sql = "insert into [user](name,age)values(@name,@age)";

修改后在運行,人品爆發的成功了

是不是迫不及待的想看看Access數據庫中是否真的插入成功呢?

打開數據庫界面。F5刷新試試

當然,你可以可以編寫sql查詢

 

 

 

 

右鍵:

 

 

 

跟着一步一步下來是不是也沒有想象中的那么難呢?其實什么都不難。只要你肯努力:)

來看看鏈接字符串:

 //連接Access字符串
  string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=userInfo.accdb;Persist Security Info=False";

這里的Microsoft.ACE.OLEDB.12.0,是連接Excel對象的接口引擎,與之對應的是:microsoft.jet.oledb.4.0

那么問題來了:

Microsoft.jet.oledb.4.0和Microsoft.ACE.OLEDB.12.0引擎有什么區別呢?

共同點:都是做為連接Excel對象的接口引擎

不同點:

對於不同的Excel版本,有兩種接口可供選擇:Microsoft.Jet.OLEDB.4.0(以下簡稱 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下簡稱 ACE 引擎)。

Jet 引擎,可以訪問 Office 97-2003,但不能訪問 Office 2007。

ACE 引擎是隨 Office 2007 一起發布的數據庫連接組件,既可以訪問 Office 2007,也可以訪問 Office 97-2003。

另外:Microsoft.ACE.OLEDB.12.0 可以訪問正在打開的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。

所以,在使用不同版本的office時,要注意使用合適的引擎。

 

我這里用的Access 2007,所以用的是ACE引擎

 

 

Data Source=userInfo.accdb。這里訪問的是相對路徑。因為數據庫放在了Debug下面,但我來自火星。我就偏偏不喜歡把數據庫放到Debug下面。

我想在項目中單獨創建一個目錄來存放數據庫。那怎么辦呢?好吧。程序員是偉大的。那你可以改路徑,在項目下面創建一個db文件夾。把數據集拷貝到里面,結構圖

 

從圖可以看出來,從Debug目錄到db目錄要退兩次,那么不就是 “..\..\” 。對嗎?

那立馬改改看看效果:

string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\..\db\userInfo.accdb;Persist Security Info=False";

對與否。你自己去測試下。哈哈。

 

記住:sql server中是可以拼接多條sql語句。然后一次性執行的。對吧,但Access是不行的。如果要執行多條sql語句。必須循環遍歷。執行一條在執行下一條,直到海枯石爛。

 

為了更好的維護。當然是首選把連接字符串配置到app.config中

看看我已經配好了的

 1 <?xml version="1.0"?>
 2 <configuration>
 3   <configSections>
 4   </configSections>
 5   <connectionStrings>
 6     <add name="GoodManage.Properties.Settings.GMConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\GM.accdb" providerName="System.Data.OleDb" />
 7   </connectionStrings>
 8   <appSettings>
 9     <add key="accessCon" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\..\db\GM.accdb;Persist Security Info=False" />
10     <add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source=" />
11     <add key="dbPath" value="..\..\db\GM.accdb" />
12     <add key="ClientSettingsProvider.ServiceUri" value="" />
13   </appSettings>
14   <startup>
15     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
16   </startup>
17   <system.web>
18     <membership defaultProvider="ClientAuthenticationMembershipProvider">
19       <providers>
20         <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, 

PublicKeyToken=31bf3856ad364e35"
serviceUri="" /> 21 </providers> 22 </membership> 23 <roleManager defaultProvider="ClientRoleProvider" enabled="true"> 24 <providers> 25 <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" /> 26 </providers> 27 </roleManager> 28 </system.web> 29 </configuration>

 

 

最后提供一個SQLHelper.cs  類

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Data.SqlClient;
  6 using System.Data;
  7 using System.Configuration;
  8 using System.Data.OleDb;
  9 using System.Web;
 10 namespace DAL
 11 {
 12     public class SQLHelper
 13     {
 14         //連接字符串
 15 
 16         static string connStr = ConfigurationManager.AppSettings["accessCon"];
 17       
 18 
 19         /// <summary>
 20         /// 返回受影響的行數
 21         /// </summary>
 22         /// <param name="comText"></param>
 23         /// <param name="param"></param>
 24         /// <returns></returns>
 25         public static int ExecuteNonQuery(string comText, params OleDbParameter[] param)
 26         {
 27             using (OleDbConnection conn = new OleDbConnection(connStr))
 28             {
 29                 using (OleDbCommand cmd = new OleDbCommand(comText, conn))
 30                 {
 31                     if (param != null && param.Length != 0)
 32                     {
 33                         cmd.Parameters.AddRange(param);
 34                     }
 35                     if (conn.State == ConnectionState.Closed)
 36                     {
 37                         conn.Open();
 38                     }
 39                     return cmd.ExecuteNonQuery();
 40                 }
 41             }
 42         }
 43         /// <summary>
 44         /// 返回數據對象
 45         /// </summary>
 46         /// <param name="comText"></param>
 47         /// <param name="param"></param>
 48         /// <returns></returns>
 49         public static object ExecuteScalar(string comText, params OleDbParameter[] param)
 50         {
 51             using (OleDbConnection conn = new OleDbConnection(connStr))
 52             {
 53                 using (OleDbCommand cmd = new OleDbCommand(comText, conn))
 54                 {
 55                     if (param != null && param.Length != 0)
 56                     {
 57                         cmd.Parameters.AddRange(param);
 58                     }
 59                     if (conn.State == ConnectionState.Closed)
 60                     {
 61                         conn.Open();
 62                     }
 63                     return cmd.ExecuteScalar();
 64                 }
 65             }
 66         }
 67         /// <summary>
 68         /// 返回table
 69         /// </summary>
 70         /// <param name="cmdText"></param>
 71         /// <param name="param"></param>
 72         /// <returns></returns>
 73         public static DataTable Adapter(string cmdText, params OleDbParameter[] param)
 74         {
 75             DataTable dt = new DataTable();
 76             //OleDbConnection con = new OleDbConnection();
 77             using (OleDbDataAdapter oda = new OleDbDataAdapter(cmdText, connStr))
 78             {
 79                 if (param != null && param.Length != 0)
 80                 {
 81                     oda.SelectCommand.Parameters.AddRange(param);
 82                 }
 83                 if (new OleDbConnection().State == ConnectionState.Closed)
 84                 {
 85                     new OleDbConnection(connStr).Open();
 86                 }
 87                 oda.Fill(dt);
 88             }
 89             return dt;
 90 
 91             /*
 92             using (SqlDataAdapter sda = new SqlDataAdapter(cmdText, connStr))
 93             {
 94                 if (param != null && param.Length != 0)
 95                 {
 96                     sda.SelectCommand.Parameters.AddRange(param);
 97                 }
 98                 sda.Fill(dt);
 99             }
100             return dt;
101              * */
102         }
103         /// <summary>
104         /// 向前讀取記錄
105         /// </summary>
106         /// <param name="cmdText"></param>
107         /// <param name="param"></param>
108         /// <returns></returns>
109         public static OleDbDataReader ExectueReader(string cmdText, params OleDbParameter[] param)
110         {
111             OleDbConnection conn = new OleDbConnection(connStr);
112             using (OleDbCommand cmd = new OleDbCommand(cmdText, conn))
113             {
114                 if (param != null && param.Length != 0)
115                 {
116                     cmd.Parameters.AddRange(param);
117                 }
118                 if (conn.State == ConnectionState.Closed)
119                 {
120                     conn.Open();
121                 }
122                 return cmd.ExecuteReader(CommandBehavior.CloseConnection);
123             }
124         }
125         /// <summary>
126         /// 讀取存儲過程
127         /// </summary>
128         /// <param name="cmdText"></param>
129         /// <param name="type"></param>
130         /// <param name="param"></param>
131         /// <returns></returns>
132         public static DataTable GetPro(string cmdText, CommandType type, params OleDbParameter[] param)
133         {
134             DataTable dt = new DataTable();
135             using (OleDbDataAdapter sda = new OleDbDataAdapter(cmdText, connStr))
136             {
137                 new OleDbCommand().CommandType = CommandType.StoredProcedure;
138                 if (param != null && param.Length != 0)
139                 {
140                     sda.SelectCommand.Parameters.AddRange(param);
141                 }
142                 sda.Fill(dt);
143             }
144             return dt;
145         }
146     }
147 }

 

 

sqlite、Access都只要安全驅動就可以用數據庫。那sql server是不是也可以 呢。答案是正確的。

只要安裝Microsoft SQL Server 2005 Express Edition,就可以使用sql數據庫了

當安裝vs2010或其他版本,也就順帶的安裝了express Edition

Microsoft SQL Server 2005 Express Edition官網下載:

http://www.microsoft.com/zh-cn/download/details.aspx?id=21844

但要管理數據庫就需要安裝SQL Server Management Studio。

在網上找到一片關於Express edition 開啟遠程連接的方法,我沒嘗試過。真的。我不騙你

http://blog.csdn.net/xiongyilong/article/details/1925353

轉載於此:

SQL Server 2005 Express 作為微軟數據庫的低端解決方案,在開發小型應用和WEB應用中有廣泛的使用。但是SQL Server 2005 Exrpress在默認安裝下只允許本機訪問,如何啟用網絡訪問功能就很有必要,現在我簡單的介紹一下。

1、 確 認成功安裝SQL Server 2005 Express和 數據庫服務已經啟動。安裝完成后,可以通過隨SQL Server 2005 Express一同安裝的工具 SQL Server Configuration Manager 查看數據庫服務和其他的配置信息。

上圖顯示數據庫服務已經啟用。

2、 查 看SQL Server Express 2005 網絡配置信息(SQL Server 2005 Network Configuration――> Protocols for SQLEXPRESS)。默認的情況下右邊列表中的Named Pipes和TCP/IP的狀態為Disable,即沒有啟用。右鍵點擊這兩項,在彈出菜單中選中Enable啟用這兩個協議,如下圖。

3、 在TCP/IP協議上雙擊鼠標,彈出對話框。修改對話框Protocol屬性頁中的“Listen All ”項設為“no”。IP Address屬性頁中,修改你要數據庫服務監聽的IP地址的屬性,修改Enabled屬性為Yes,修改TCP Dynamic Ports屬性為空,TCP Port項在默認安裝下為空,現在修改為我們監聽端口1433。修改后的狀態如下圖所示;

 

 

 

4、 啟動管理工具

,管理界面如下所示:

選中“Surface Area Configuration for Services and Connection”選項

5、 改修改DATA Engine的Remote Connection屬性,修改后的屬性如下圖所示:

6、 完成以上操作后需要重新啟動數據庫服務才能使修改生效,下圖的操作可以完成數據庫服務的重啟。

 

 

7、 重啟后,可以在命令窗口輸入如下命令“netstat - na”命令查看服務器監聽的所有端口,如果我們設備的1433端口正在監聽,我們啟用SQL Server 2005 Express網絡操作成功。當然也可以使用telnet 命令來驗證數據庫操作是否成功。使用netstat命令操作如下圖所示。

 

 

 

 好了。至此。完

 


免責聲明!

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



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