C#访问Access和Win7 64位下可能遇到的 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序 问题

223 篇文章 6 订阅

新建一个access数据库和表;录入几条数据;下面工具可在网上下;

ac1.cs;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data.SqlClient;
 
namespace CSharpAccess
{
    class Program
    {
        static void Main(string[] args)
        {
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=s:/rch.mdb");
            conn.Open();
            string sql = "select * from rch";
            OleDbCommand command = new OleDbCommand(sql, conn);
            OleDbDataReader reader = command.ExecuteReader();
            try
            {
                while (reader.Read())
                {
                    for (int i = 0; i < reader.FieldCount;i++ )
                    {
                        Console.Write("{0} ", reader[i]);
                    }
                    Console.WriteLine();                    
                }
            }
            finally
            {
                reader.Close();
                conn.Close();
            }
        }
    }
}

 使用命令行编译;方便起见,把ac1.cs拷贝到.net framework 的目录;C:\Windows\Microsoft.NET\Framework64\v4.0.30319>

如下;然后执行 csc 命令构建;

 构建成功;

运行;出现错误  

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

当前是win7 64位;多数情况下应该不存在此问题,这是系统自带的;

这个 oledb提供程序,它是一个dll, msjetoledb40.dll;下载一个此dll,和前面构建出的exe放到 一个目录下; 

再运行exe,还是一样;然后把msjetoledb40.dll拷贝一份到 c:\windows\system32 目录下,再运行exe,也是一样;

查网上资料,一些信息如下;

    注册组件 regsvr32 msjetoledb40.dll;

    重新安装MDAC28.exe;

    可能还有其他一些操作,涉及IIS或权限等;比较麻烦;

又看到一种说法,只要在VS中,在项目--》***属性-----》生成下面将目标平台改成X86;即可;

这个要看电脑的具体情况;

下面来用命令行构建,csc命令添加目标平台为x86参数;/platform参数选项如下;

    用 /platform:x86 编译的程序集将在运行于 WOW64 下的 32 位 CLR 上执行。
    用 /platform:anycpu 编译的 DLL 将在加载该进程的同一 CLR 上执行。(例如:IIS应用程序池中,“启用32应用程序”为True时,则在32位CLR上执行,否则在64位CLR上执行)
    用 /platform:anycpu 编译的可执行文件将在 64 位 CLR 上执行。

带 /platform 参数构建,如下图;

构建好了;再运行;可以访问到mdb数据库了; 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值