原文: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.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目录下面,编写测试代码

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb; //引入命名空间 需要添加引用 System.Data.dll namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//连接Access字符串
string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=userInfo.accdb;Persist Security Info=False"; //插入数据
string name = "张三";
int age = ; string sql = "insert into user(name,age)values(@name,@age)";
OleDbParameter[] para = {
new OleDbParameter("@name",OleDbType.VarChar),
new OleDbParameter("@age",OleDbType.Integer),
/*
* 我不知道这样写有什么区别,除了更简单还有什么好处
new OleDbParameter("@age",age)
*/
};
para[].Value = name;
para[].Value = age; int rows = ; using (OleDbConnection connect = new OleDbConnection(conStr))
{
using (OleDbCommand cmd = new OleDbCommand(sql, connect))
{
if (para != null && para.Length > ) cmd.Parameters.AddRange(para); if (connect.State == System.Data.ConnectionState.Closed) connect.Open(); rows = cmd.ExecuteNonQuery();
}
} if (rows > ) Console.WriteLine("插入成功");
Console.ReadLine();
}
}
}

运行后提示错误:

仔细看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中

看看我已经配好了的

 <?xml version="1.0"?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="GoodManage.Properties.Settings.GMConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\GM.accdb" providerName="System.Data.OleDb" />
</connectionStrings>
<appSettings>
<add key="accessCon" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\..\db\GM.accdb;Persist Security Info=False" />
<add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source=" />
<add key="dbPath" value="..\..\db\GM.accdb" />
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<system.web>
<membership defaultProvider="ClientAuthenticationMembershipProvider">
<providers>
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral,

PublicKeyToken=31bf3856ad364e35" serviceUri="" />
</providers>
</membership>
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
<providers>
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
</providers>
</roleManager>
</system.web>
</configuration>

最后提供一个SQLHelper.cs  类

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.Data.OleDb;
using System.Web;
namespace DAL
{
public class SQLHelper
{
//连接字符串 static string connStr = ConfigurationManager.AppSettings["accessCon"]; /// <summary>
/// 返回受影响的行数
/// </summary>
/// <param name="comText"></param>
/// <param name="param"></param>
/// <returns></returns>
public static int ExecuteNonQuery(string comText, params OleDbParameter[] param)
{
using (OleDbConnection conn = new OleDbConnection(connStr))
{
using (OleDbCommand cmd = new OleDbCommand(comText, conn))
{
if (param != null && param.Length != )
{
cmd.Parameters.AddRange(param);
}
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return cmd.ExecuteNonQuery();
}
}
}
/// <summary>
/// 返回数据对象
/// </summary>
/// <param name="comText"></param>
/// <param name="param"></param>
/// <returns></returns>
public static object ExecuteScalar(string comText, params OleDbParameter[] param)
{
using (OleDbConnection conn = new OleDbConnection(connStr))
{
using (OleDbCommand cmd = new OleDbCommand(comText, conn))
{
if (param != null && param.Length != )
{
cmd.Parameters.AddRange(param);
}
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return cmd.ExecuteScalar();
}
}
}
/// <summary>
/// 返回table
/// </summary>
/// <param name="cmdText"></param>
/// <param name="param"></param>
/// <returns></returns>
public static DataTable Adapter(string cmdText, params OleDbParameter[] param)
{
DataTable dt = new DataTable();
//OleDbConnection con = new OleDbConnection();
using (OleDbDataAdapter oda = new OleDbDataAdapter(cmdText, connStr))
{
if (param != null && param.Length != )
{
oda.SelectCommand.Parameters.AddRange(param);
}
if (new OleDbConnection().State == ConnectionState.Closed)
{
new OleDbConnection(connStr).Open();
}
oda.Fill(dt);
}
return dt; /*
using (SqlDataAdapter sda = new SqlDataAdapter(cmdText, connStr))
{
if (param != null && param.Length != 0)
{
sda.SelectCommand.Parameters.AddRange(param);
}
sda.Fill(dt);
}
return dt;
* */
}
/// <summary>
/// 向前读取记录
/// </summary>
/// <param name="cmdText"></param>
/// <param name="param"></param>
/// <returns></returns>
public static OleDbDataReader ExectueReader(string cmdText, params OleDbParameter[] param)
{
OleDbConnection conn = new OleDbConnection(connStr);
using (OleDbCommand cmd = new OleDbCommand(cmdText, conn))
{
if (param != null && param.Length != )
{
cmd.Parameters.AddRange(param);
}
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
/// <summary>
/// 读取存储过程
/// </summary>
/// <param name="cmdText"></param>
/// <param name="type"></param>
/// <param name="param"></param>
/// <returns></returns>
public static DataTable GetPro(string cmdText, CommandType type, params OleDbParameter[] param)
{
DataTable dt = new DataTable();
using (OleDbDataAdapter sda = new OleDbDataAdapter(cmdText, connStr))
{
new OleDbCommand().CommandType = CommandType.StoredProcedure;
if (param != null && param.Length != )
{
sda.SelectCommand.Parameters.AddRange(param);
}
sda.Fill(dt);
}
return dt;
}
}
}

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

好了。至此。完

Access之C#连接Access的更多相关文章

  1. Java 连接Access

    Java 连接Access 第一次使用连接Access数据库, 记录一下遇到的坑 Access驱动下载地址 http://pan.baidu.com/s/1o8ltTfc 不使用WINDOW的建立数据 ...

  2. 【.net 深呼吸】连接Access数据库应注意的几点

    本地数据库可以有Y种选择,比如Sqlite.SQL Server Express.SQL Local DB.SQL Server CE.Access等,本文老周选用比较著名的Access本地数据库,在 ...

  3. C#连接Access与SQL Server

    1.连接Access数据库 string strConnection = "Provider=Microsoft.Ace.OleDb.12.0; Data Source=" + S ...

  4. C#连接Access数据库(详解)

    做一个用VS2012的C#连接Access数据库的备忘, SQL数据库固然强大,有大微软的强力技术支持,LINQ的方便操作,但是如果写一个小程序对数据库方面没有什么大的要求的话,将来在数据库方面就可以 ...

  5. ASP.net分别连接SQLserver数据库与连接Access数据库精英版

    -------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0; ...

  6. paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误

    paip. 解决php 以及 python 连接access无效的参数量.参数不足,期待是 1"的错误 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源 ...

  7. php连接Access数据库错误及解决方法

    <?php $connstr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("data.m ...

  8. 实现远程连接ACCESS数据库的方法

    使用了TCP/IP,ADO及(需要安装Microsoft 4.0.).分服务器和客户端两部分,可以多用户同时连接.远程连接Access有很多方法,我以前已经比较详细的回答过(见下面所列的5种方法),我 ...

  9. 关于JDBC 连接Access 数据库

    ************连接方式(一)Access_JDBC30.jar,此包由于是免费的,所有限制连接单次不超过50************************* Connection conn ...

随机推荐

  1. dwz+jquery+fileupload+springmvc实现文件上传 及图片预览

    1 前台jsp:文件的上传利用了iframe实现局部刷新功能.使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jarD ...

  2. Swift - 按钮(UIButton)的用法

    1,按钮的创建 (1)按钮有下面四种类型: UIButtonType.ContactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 UIButtonType.DetailDisc ...

  3. 汇编与高级语言(插图结合Delphi代码,来自linzhengqun)

    汇编与高级语言 1.      汇编基础知识 1.1.      寄存器 寄存器 用途 EAX,EBX,EDX,ECX 通用寄存器,由程序员自己指定用途,也有一些不成文的用法: EAX:常用于运算. ...

  4. CURD特性

    本节课大纲: 一.ThinkPHP 3 的CURD介绍 (了解) 二.ThinkPHP 3 读取数据 (重点) 对数据的读取 Read $m=new Model('User'); ##返回一个实例 $ ...

  5. JavaScript 中的事件类型2(读书笔记思维导图)

    Web 浏览器中可能发生的事件有很多类型.如前所述,不同的事件类型具有不同的信息,而“ DOM3级事件”规定了以下几类事件: UI(User Interface,用户界面)事件:当用户与页面上的元素交 ...

  6. linux find命令强大之处

    find命令 find pathname -options [-print -exec -ok ...]   -print: find命令将匹配的文件输出到标准输出.   -exec: find命令对 ...

  7. Android实战简易教程-第九枪(BitmapFactory.Options对资源图片进行缩放)

    我们知道,我们编写的应用程序都是有一定内存限制的.程序占用了过高的内存就easy出现OOM(OutOfMemory)异常.因此在展示高分辨率图片的时候,最好先将图片进行压缩,压缩后的图片大小应该和用来 ...

  8. Extjs4.2 Desktop 拖动黑色和白色的桌面图标的解决方案

    最近做了一个extjs4.2的desktop桌面demo,该desktop从原来的包中剥离出来,并实现了桌面图标休息,拖动桌面图标,但是,用户抱怨拖动桌面图标会出现黑色和白色,测试,在 extjs4. ...

  9. C#开源汇总

    原文:C#开源汇总 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Pho ...

  10. Xsoup 是一款基于 Jsoup 开发的

    Xsoup 是一款基于Jsoup 开发的,使用XPath抽取Html元素的工具.它被用于作者的爬虫框架 WebMagic 中,进行XPath 解析和抽取. 此次更新主要增加了一些XPath语法的支持. ...