如果是個人用的小程序的話。一般都推薦用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
轉載於此:
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、 啟動管理工具
,管理界面如下所示:
5、 改修改DATA Engine的Remote Connection屬性,修改后的屬性如下圖所示:
6、 完成以上操作后需要重新啟動數據庫服務才能使修改生效,下圖的操作可以完成數據庫服務的重啟。
7、 重啟后,可以在命令窗口輸入如下命令“netstat - na”命令查看服務器監聽的所有端口,如果我們設備的1433端口正在監聽,我們啟用SQL Server 2005 Express網絡操作成功。當然也可以使用telnet 命令來驗證數據庫操作是否成功。使用netstat命令操作如下圖所示。
好了。至此。完