IIS(64ビット版)でJETを使用する。

デフォルトではIISは32ビットアプリが動かない状態になっており、JET(mdb)のドライバーは 32 ビット しかないため、Windows Server 2008 64bit版のIISでJET(Microsoft.Jet.OLEDB.4.0)を使用すると、「’Microsoft.Jet.OLEDB.4.0′ プロバイダはローカルのコンピュータに登録されていません。 」というエラーが返ってきます。

上記は、IISで「32 ビット アプリケーションの有効化」をtrue(有効)にすることにより解決できます。

「32 ビット アプリケーションの有効化」はアプリケーションプールにありますが、下記のページに設定方法が記載されています。

32bit Application on 64bit IIS7
http://www.gine2.jp/blog/kusa/post/32bit-Application-on-64bit-IIS7.aspx

 

特にサンプルコードは不要なのですが、JETへのアクセスに使用したコードを記載します。
※コードは32ビットも64ビット関係ありません。

 

mdb.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="mdb.aspx.cs" Inherits="mdb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater runat="server" ID="rep">
            <ItemTemplate>
                <p>
                <%# DataBinder.Eval(Container.DataItem, "ID")%>
                <%# DataBinder.Eval(Container.DataItem, "姓")%>
                <%# DataBinder.Eval(Container.DataItem, "名")%>
                </p>
            </ItemTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

 

mdb.aspx.cs

using System;
using System.Data;
using System.Data.OleDb;

public partial class mdb : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            string connString = "Provider=Microsoft.Jet.OLEDB.4.0;;Data Source=c:\inetpub\wwwroot\db\northwind.mdb;User Id=admin;Password=;";
            string queryString = "SELECT ID, 姓, 名 FROM 社員;";

            using (OleDbConnection con = new OleDbConnection(connString))
            {
                OleDbCommand cmd = con.CreateCommand();
                cmd.CommandText = queryString;

                con.Open();

                rep.DataSource = cmd.ExecuteReader();
                rep.DataBind();

                con.Close();
            }

        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }

    }
}

 

※Windows Server 2008R2(RC版)で作業を行ったため、製品版では違う可能性もあります。

Comments are closed.

Post Navigation