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

首先,我们建一个数据库,因为大家使用的office版本不同,有用2000的有用2003的还有用 2007或者2010的.我用的是2007,但是无论用哪个版本请把建的数据库建为.mdb结尾的2003版本的不要建 .accdb结尾的.

建一个表,请先在设计视图里面设计列名,主键以及类型等 我们这里做一个简单的水果表,如图 你的数据库名为fruit.mdb,这个保存完后是一个数据库文件,里面可以包含各种表,里面的我们建了一个表也叫fruit请区分.建完表后请另存为 2002-2003格式的.mdb文件设置好保存路径.

_________________________________________________还是那华丽的分割线_____________________________________________________

表建完了,运行VS2012,我们做一个winform的小应用.

拖入个DataGridView和一个Button做个界面

代码

using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace winform_access
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\\fruit.mdb"); //Jet OLEDB:Database Password=
OleDbCommand cmd = conn.CreateCommand(); cmd.CommandText = "select * from fruit";
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
if (dr.HasRows)
{
for (int i = ; i < dr.FieldCount; i++)
{
dt.Columns.Add(dr.GetName(i));
}
dt.Rows.Clear();
}
while (dr.Read())
{
DataRow row = dt.NewRow();
for (int i = ; i < dr.FieldCount; i++)
{
row[i] = dr[i];
}
dt.Rows.Add(row);
}
cmd.Dispose();
conn.Close();
dataGridView1.DataSource = dt;
}
}
}

这里面连接语句和SQL很像,就是把SqlConnection换成OleDbConnection,别忘了添加引用using System.Data.OleDb;

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\\fruit.mdb" 拼接字符串,

如果怕有拼写错误也可以运行   视图--服务器资源管理器--右键数据连接--添加一个Access数据库源并找到文件路径,然后生成完后在属性里面复制字符串连接,如图

测试链接 连接成功后复制粘贴到OledbConnection()里面.

如果遇到转译不识别 请把\处改为 \\或者 ""前面加@ 如"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\\fruit.mdb" 或者@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\\fruit.mdb"

_________________________________________________还是那华丽的分割线_____________________________________________________

如果出现  未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。

在菜单 “项目”的最下面 工程属性  菜单,选择“生成”选项卡,将目标平台由“Amy CPU”或者“*64”改成“*86”。

   点击 配置管理器  新建一个x86的

运行

_________________________________________________还是那华丽的分割线_____________________________________________________

番外篇

这里面的 if (dr.HasRows)和 while (dr.Read())

如果用

    if (dr.Read())
{
for (int i = ; i < dr.FieldCount; i++)
{
dt.Columns.Add(dr.GetName(i));
}
dt.Rows.Clear();
}
while (dr.Read())
{
DataRow row = dt.NewRow();
for (int i = ; i < dr.FieldCount; i++)
{
row[i] = dr[i];
}
dt.Rows.Add(row);
}

数据少了第一条!,Read() 读到数据返回true但是从第二条开始读

datareader.HasRows 只是检则库中是否有记录,如果有则返回true,还得再用read()读取.
datareader.read()为从数据开头往后读,如果库中已读到结尾了(可能没有记录)则返回false,如果用在if中,则会自动读出一条,else里则不必再用read(),如果有while(含有read()条件),则自动从第二条开始往下读
结论:单条可用read()检测,多条用到while时用HasRows检测... 声明:SqlDataReader 提供一种从 SQL Server 数据库读取行的只进流的方式。无法继承此类。 我在编写一个小程序时遇到一个小问题: 使用SqlDataReader实例reader的HasRows判断数据流中是否存在数据,进而执行数据的输出操作,其中用到代码如下 SqlDataReader reader = Command.ExecuteReader();
while(reader.HasRows)
{
reader.Read();
qx_Str = reader[].ToString(); //出错位置
}
reader.Close();
sqlcon.Close(); 运行后在红色位置报错:在没有任何数据时进行无效的读取尝试 出现这种情况很明显是读取器运行到的位置无数据流,无法执行数据的输出 这时确定判断是while处的判断条件有误,在MSDN文档中查询到: HasRows属性 // HasRows 获取一个值,该值指示 System.Data.SqlClient.SqlDataReader 是否包含一行或多行。 原来是出在HasRows的使用上,只要SqlDataReader存在数据流(数据流不为空)则返回的bool值为真,这样的话,这个循环总执行(难怪使用try ..catch 假死)。数据为空时,read[]读取数据时,则会出现错误! 那么如何避免出现该错误呢,仍然是用HasRows属性? 可以想到只需利用if语句取消循环状态!! 那么要用while怎么办呢?使用SqlDataReader实例的Read()方法,对! 让我们认识一下Read()方法: // 摘要: 使 System.Data.SqlClient.SqlDataReader 前进到下一条记录。
// 返回结果: 如果存在多个行,则为 true;否则为 false。 则只需将reader.Read()替换reader.HasRows执行循环,为什么行呢? SqlDataReader的默认位置在[第一条记录前面]。因此,必须调用 Read 来开始访问任何数据。 Read()为前进到下一条记录。当循环执行到Read()无数据时,则循环结束!!不过还要将循环里的Read()去掉,则每循环一次前进了两行数据。
}

FieldCount

是读取有多少列字段,这里是返回的一个整数,读取到的列的个数.

												

C#连接Access数据库(详解)的更多相关文章

  1. JAVA通过JDBC连接Oracle数据库详解【转载】

    JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...

  2. JAVA连接各种数据库详解

    Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...

  3. JAVA采用JDBC连接操作数据库详解

    JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...

  4. EntityFramewok Core 1.1连接MSSql数据库详解

    最近在研究ASP.NET Core,其中就用到了Entity Framework Core,对于Entity Framework Core连接SqlServer数据库,使用Code Frist创建数据 ...

  5. 20.java-JDBC连接mysql数据库详解

    1.JDBC介绍 jdbc(java database connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成. JDBC需要用到的类和接口有: Dri ...

  6. SQLServer 远程链接MySql数据库详解

    SQLServer 远程链接MySql数据库详解 by:授客 QQ:1033553122 测试环境: Microsoft Windows XP Professional 版本2000 Service ...

  7. hikari连接池属性详解

    hikari连接池属性详解 一.主要配置 1.dataSourceClassName 这是DataSourceJDBC驱动程序提供的类的名称.请查阅您的特定JDBC驱动程序的文档以获取此类名称,或参阅 ...

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

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

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

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

随机推荐

  1. EmguCV(OpenCV)实现高效显示视频(YUV)叠加包括汉字

    视频处理中,往往需要在上面增加文字包括汉字英文字母数字标点等,Emgu.CV/opencv 绘图 线面文字包括中文 这篇里也有相关介绍,但是这篇里根据逐像素修改rgb值的方法效率太低 查了很多资料,基 ...

  2. 英文写作——冠词的使用(Use 0f Articles)

    1.使用'a','an','the'和不使用冠词的基本规则: <1>泛指,不可数名词不能有任何冠词 <2>泛指,可数,复数名词前不能有冠词 <3>泛指,可数,单数名 ...

  3. NAT穿越

    1.NAT类型 目前主要的NAT类型有如下几种: 1)Full-cone NAT, also known as one-to-one NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个 ...

  4. JavaScript 快速排序(Quicksort)

    "快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元 ...

  5. Rails的三种环境----开发环境,生产环境和测试环境

    Rails 的三个环境 Rails 的应用程序预设提供了三种不同的执行模式: development environment 开发模式,用在你的开发的时候 test environment 测试模式, ...

  6. Linux C 文件操作,系统调用 -- open()、read() 和 标准I/O库 -- fopen()、fread()

    函数汇总: open().write().read().close() fopen().fwrite().fread().fclose() 一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件 ...

  7. 【Alpha版本】冲刺阶段——Day 1

    我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬 ...

  8. MySQL 常用SQL技巧和常见问题

    一.巧用正则表达式 二.巧用RAND() 提取随机行 利用rand() 的随机数功能,结合 order by 子句完成随机抽取某些行的功能. 三.利用 group by 的 with rollup 子 ...

  9. iOS开发——高级篇——图片轮播及其无限循环效果

    平时APP中的广告位.或者滚动的新闻图片等用到的就是图片轮播这种效果,实现方式主要有两种,一种是ScrollView+ImageView,另一种则是通过CollectionView,今天总结的是Scr ...

  10. linux常用命令-文件搜索命令-find

    find [目录] [选项] 文件名或者正则表达式 -name 根据文件名搜索 -iname 搜索文件名的时候忽略大小写 例:find /etc -name init     find /etc -i ...