C#连接Access数据库(详解)
做一个用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 = 0; i < dr.FieldCount; i++){dt.Columns.Add(dr.GetName(i));}dt.Rows.Clear();}while (dr.Read()){DataRow row = dt.NewRow();for (int i = 0; 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 = 0; i < dr.FieldCount; i++){dt.Columns.Add(dr.GetName(i));}dt.Rows.Clear();}while (dr.Read()){DataRow row = dt.NewRow();for (int i = 0; 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[0].ToString(); //出错位置 } reader.Close(); sqlcon.Close();运行后在红色位置报错:在没有任何数据时进行无效的读取尝试出现这种情况很明显是读取器运行到的位置无数据流,无法执行数据的输出这时确定判断是while处的判断条件有误,在MSDN文档中查询到:HasRows属性// HasRows 获取一个值,该值指示 System.Data.SqlClient.SqlDataReader 是否包含一行或多行。 原来是出在HasRows的使用上,只要SqlDataReader存在数据流(数据流不为空)则返回的bool值为真,这样的话,这个循环总执行(难怪使用try ..catch 假死)。数据为空时,read[0]读取数据时,则会出现错误!那么如何避免出现该错误呢,仍然是用HasRows属性?可以想到只需利用if语句取消循环状态!!那么要用while怎么办呢?使用SqlDataReader实例的Read()方法,对!让我们认识一下Read()方法:// 摘要: 使 System.Data.SqlClient.SqlDataReader 前进到下一条记录。 // 返回结果: 如果存在多个行,则为 true;否则为 false。 则只需将reader.Read()替换reader.HasRows执行循环,为什么行呢?SqlDataReader的默认位置在[第一条记录前面]。因此,必须调用 Read 来开始访问任何数据。Read()为前进到下一条记录。当循环执行到Read()无数据时,则循环结束!!不过还要将循环里的Read()去掉,则每循环一次前进了两行数据。}
FieldCount
是读取有多少列字段,这里是返回的一个整数,读取到的列的个数.
C#连接Access数据库(详解)相关推荐
- 纯java实现连接access数据库详解
大家好,今天详细介绍一下纯java实现连接access数据库. 首先,连接驱动是要使用ucanaccess,这就需要几个jar包依赖 maven项目可以去寻找相应的依赖,将依赖导入项目后就ok了,然后 ...
- vb mysql加载控件_VB如何连接ACCESS数据库详解
首先有一点要注意,数据库的使用与我们以往所使用的文本文件不同.例如我们使用文本文件,来记录各种有用的数据.那么大致有以下几步: 读取文件 -- 格式化数据 -- 关闭文件 -- 使用数据 如果数据量较 ...
- 用Navicat连接服务器数据库详解
用Navicat连接服务器数据库详解 https://www.2cto.com/database/201702/594659.html
- C#连接sqlServer数据库详解
C# 是如何跟SQL Server进行连接的? 在C#/.NET程序设计中,离不开ADO.NET.ADO.NET是.NET连接数据库的重要组件.使用其可以很方便地访问数据库,ADO.NET还可以访问O ...
- java启动监听器报错_JAVA通过JDBC连接Oracle数据库详解【转载】
1.注册加载驱动 驱动名:DRIVER="oracle.jdbc.driver.OracleDriver"; Class.forName("驱动类名"); 2. ...
- 使用PLSQL Developer连接Oracle数据库详解
**前景摘要:**本人使用plsql连接oracle折磨半天才得以正常连接使用,由于总是需要换机子,所以每次都要重新安装,所以将其记录下来,为以后不时之需. 安装过的系统: Windows7 64位 ...
- Java如何连接mysql数据库详解(代码)
工具: https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) eclip ...
- ASP.net连接Mysql数据库详解
1.资源:Mysql-5.6.24-win32.VS2013.mysql-connector-odbc-5.3.6-win32: 2.ODBC下载:在Mysql官网可下载Mysql ODBC,注意,什 ...
- html5链接access数据库,JDBC连接Access数据库的几种方式详解
前几天老师让作几个JSP连接数据库的例子,而且连接的数据库是Access数据库,对于这个数据库自己也不是太了解,后来了解到学习JDBC的时候,连接access是很方便的,很容易的,但是在连接的时候也出 ...
最新文章
- 1003. [ZJOI2006]物流运输【区间DP+最短路】
- TIMING_03 时序分析原理
- java将图片铺满panel_如何让添加的背景图片铺满整个JFrame?
- 笔记:git常用操作,git使用,git命令行
- GAN网络(Generative Adversarial Networks )
- BZOJ 1015 题解
- windows命令行下ftp连接超时的可能原因
- php代码加密工具xend,PHP代码加密工具 Xend v3.0.1
- 安卓手机权限总结安卓权限列表
- [学习][笔记]C++/WinRT入门 01Hello world
- Linux刻录光盘win10认不到,Win10不能读取DVD光驱和刻录光盘解决方法
- mac中idea使用createNewFile创建文件
- 曝光,程序员的 10 个摸鱼神器
- 【listener hangs】监听hangs,导致新的连接无法连接数据库
- 国外企业电子邮箱大全,国外用邮箱哪个好?怎么注册国外邮箱?
- 0027算法笔记——【回溯法】回溯法与装载问题
- 如何解决终端连接数超过最大连接数
- Nvidia Jetson NX配置教程 for 阿福哥
- 在Windows 7下安装U871或U872,在检测组件窗口时,出现MDAC组没有安装的提示的解决办法...
- 房价疯涨背后:山雨欲来风满楼
热门文章
- 概率校准calibration_curve,用Isotonic regression,得出calibration_curve的好坏,用交叉熵检验,和方差,及使用朴素贝叶斯方法
- 使用mapreduce进行流量汇总程序开发
- 华为5面,测试岗报价12k,面试官说我不尊重华为,他们没有那么低的薪资?
- 关于阿里云服务器ECS与域名的绑定详细过程介绍
- 如何在一个jsp页面中弹出另一个jsp页面
- 小白零基础C#学习笔记
- Discuz招商加盟门户网站整站模板/加盟项目网站商业版源码/整站带测试数据
- Java项目:SSM二手汽车交易商城网站管理系统
- ipv6地址概述——带你了解ipv6与ipv4的不同
- Linux进程的概念