博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Access之C#连接Access
阅读量:4979 次
发布时间:2019-06-12

本文共 11133 字,大约阅读时间需要 37 分钟。

原文:

如果是个人用的小程序的话。一般都推荐用Sqlite和Access

使用SQlite数据库需要安装SQLite驱动,详情:

同样要使用Access数据库一必须安装Access驱动程序。驱动下载:

官网下载:

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

 

微软ADO.NET数据提供程序

数据提供程序 命名空间 程序集
OLE DB System.Data.OleDb System.Data.dll
Microsoft SQL Server System.Data.SqlClient System.Data.dss
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 Program10     {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 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

 

 

最后提供一个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         ///  20         /// 返回受影响的行数 21         ///  22         ///  23         ///  24         /// 
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 /// 44 /// 返回数据对象 45 /// 46 /// 47 /// 48 ///
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 /// 68 /// 返回table 69 /// 70 /// 71 /// 72 ///
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 /// 104 /// 向前读取记录105 /// 106 /// 107 /// 108 ///
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 /// 126 /// 读取存储过程127 /// 128 /// 129 /// 130 /// 131 ///
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官网下载:

但要管理数据库就需要安装SQL Server Management Studio。

在网上找到一片关于Express edition 开启远程连接的方法,我没尝试过。真的。我不骗你

转载于此:

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命令操作如下图所示。

 

 

 

 好了。至此。完

 

posted on
2015-05-09 09:42 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/4489416.html

你可能感兴趣的文章
Java高新技术 类加载器
查看>>
js原型
查看>>
Android开发 自制圆形带进度显示的进度条
查看>>
.Net IE10 _doPostBack 未定义
查看>>
MVC ashx 中禁用Html标签请求验证
查看>>
9-lvs-lvs集群-及keepalived健康检查
查看>>
转:后端开源软件集合
查看>>
2016级算法第三次上机-D.双十一的抉择
查看>>
工作中的。学习
查看>>
洛谷 P1892 [BOI2003]团伙(并查集)
查看>>
UVA10763 交换学生 Foreign Exchange 题解
查看>>
精益管理
查看>>
python爬某个网站的图片
查看>>
SDN第二次上机作业
查看>>
关于行和列的算法
查看>>
机器学习方法(七):Kmeans聚类K值如何选,以及数据重抽样方法Bootstrapping
查看>>
【Linux 运维】 安装PHP工具Composer
查看>>
深度学习笔记之目标检测算法系列(包括RCNN、Fast RCNN、Faster RCNN和SSD)
查看>>
机器学习概念之特征转换(Feature conversion)
查看>>
全网最详细的一个超级好用的命令行工具【Cmder】的优点有哪些?
查看>>