C#创建和连接Access数据库
acmilan2016/07/02软件综合 IP:四川

Access数据库虽然以性能差劲著称,但是在微型应用中还是挺方便的。

首先确认你的工程是32位(默认的Any不行),这里应该显示为x86或Win32,如果不是需要先修改。这主要是因为创建数据库使用的COM组件ADOX不支持64位,连接数据库的Jet引擎也不支持64位(新版数据库引擎不自带,需要安装一个比较大的库,使用比较麻烦)。

0.png

然后需要添加ADOX这个COM组件:

1.png

创建数据库使用XXXXXXXtalog的Create命令:

<code class="language-cs">using ADOX;
</code>
<code class="language-cs">static void CreateDB(string filePath)
{
    Catalog catalog = new Catalog();
    if (!File.Exists(filePath))
    {
        catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Jet OLEDB:Engine Type=5");
    }
    catalog = null;
    GC.Collect();
}
</code>

连接Access数据库通常使用OLEDB,连接字符串如下:

<code class="language-cs">"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件名;Jet OLEDB:Engine Type=5"
</code>

全部代码如下:

<code class="language-cs">using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using System.IO;
using ADOX;
using System.Data;
using System.Data.OleDb;
using System.Data.Common;

namespace ConsoleApplication1
{
    class Program
    {
        static string mdbfile = "sss.mdb";

        static void Main(string[] args)
        {
            try
            {
                CreateDB(mdbfile);
                using (DbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbfile + ";Jet OLEDB:Engine Type=5"))
                {
                    conn.Open();
                    using (DbCommand cmd = conn.CreateCommand())
                    {
                        try
                        {
                            cmd.CommandText = "create table sss (id int, name varchar);";
                            cmd.ExecuteNonQuery();
                        }
                        catch (DbException ex)
                        {
                        }
                        cmd.CommandText = "insert into sss values(1, 'acmilan');";
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = "insert into sss values(2, '中文字符');";
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        static void CreateDB(string filePath)
        {
            Catalog catalog = new Catalog();
            if (!File.Exists(filePath))
            {
                catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Jet OLEDB:Engine Type=5");
            }
            catalog = null;
            GC.Collect();
        }
    }
}
</code>

[修改于 7年11个月前 - 2016/07/02 11:54:45]

来自:计算机科学 / 软件综合
3
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
acmilan 作者
7年11个月前 修改于 7年11个月前 IP:四川
822154

轻量级数据库建议使用SQLite(不支持Win98/Me/NT4,因为最低要求.NET 2.0 SP2)

XXXXXXXXXXXXXXXXXXXXXXXXXXXXX/XXXXXXXXml/doc/trunk/www/downloads.wiki

新系统可以使用Microsoft SQL Server 2012/2014/2016 Express LocalDB

XXXXXXXXXXXXXXXXXXXXXXXXX/zh-cn/download/XXXXXXXXXXpx?id=29062

XXXXXXXXXXXXXXXXXXXXXXXXX/zh-CN/download/XXXXXXXXXXpx?id=42299

XXXXXXXXXXXXXXXXXXXXXXXXX/zh-CN/download/XXXXXXXXXXpx?id=52679

注意虽然SQL Server 2016 Express版本不再支持Win7,但是LocalDB版本仍然支持Win7。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
7年11个月前 修改于 7年11个月前 IP:四川
822173

微软的各种数据库连接技术介绍:

  • DAO -- 数据访问对象。Microsoft Jet引擎(Access/Excel 2003格式数据库)的封装
  • ODBC -- 开放数据库连接。连接数据库的标准技术,可以在没有其它方法时使用。注意MFC等框架的老版本可能不支持Unicode的ODBC连接
  • RDO -- 远程数据对象。是ODBC的封装,用于远程访问
  • OLEDB -- OLE数据库。一种底层数据库连接技术。
  • ADO -- ActiveX数据对象。支持DSN、ODBC、OLEDB三种方式。
  • XXXXXXT -- .NET数据对象。是一组.NET进行数据访问的通用接口和抽象类,位于System.Data和XXXXXXXXXXXXXXXmon命名空间内。

DAO、RDO已经淘汰了,OLEDB难以编程,建议选择ODBC、ADO、XXXXXXT这三种方式。

怎么选择数据库连接技术:

  • 使用C/C++,不支持COM:选择ODBC
  • 使用C/C++,支持COM:选择ADO
  • 使用VB/VBA/VBScript:选择ADO
  • 使用.NET,数据库支持XXXXXXT:选择XXXXXXT
  • 使用.NET,数据库支持OLEDB:选择XXXXXXT to OLEDB
  • 使用.NET,数据库不支持其它访问方式:选择XXXXXXT to ODBC
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
7年11个月前 IP:四川
822179
除了使用数据库之外,也可以使用XML、JSON、YAML等结构化数据语言来保存数据,但是它们并不是数据库(Database),它们是文档(Document)。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
acmilan
进士 学者 笔友
文章
461
回复
2934
学术分
4
2009/05/30注册,5年3个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}