はじめまして。よろしくお願い致します。
Windows7 64ビットでAccess2010 32ビットがインストールされた状態でaccdbファイルに接続しようとすると
下記のエラーが出ます。
32ビットのAccessをアンインストールし、同一端末で64ビットのAccessをインストールすると問題なく接続が出来ます。
ACCESSは起動し、該当ファイルは64ビット・32ビットどちらも問題なく開けます。
accdbは32ビット版(XP)で作成したものです。
何か設定をすればいけるのか、そもそも32ビット版だと出来ないのかご教授
頂けると大変ありがたいです。
開発環境は、Visual Studio 2005 C#.net (Frameworkは3.5)となります。
該当のソースコードも以下に記載させて頂きます。
下記ソースコードの、
//DB接続
this.dbc.Open();
の部分でエラーが発生しております。
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
namespace patrusts
{
public class DBAccess
{
#region フィールド変数
// DB接続パラメータ設定
private static String strDBConnection;
// DBコネクション定義.作成
private OleDbConnection dbc;
// トランザクション定義
private OleDbTransaction dt;
// DBコマンド定義
private OleDbCommand cmd;
// データ・リーダー定義
private static OleDbDataReader dr;
private static DataTable dataTable1;
private static DateTime d;
//private static log_file log = new log_file();
private static String DB_SAVE = Utility.DB_save;
private static String DB_NAME = Utility.DB_name;
#endregion
#region プロパーティ
public OleDbConnection DBCon
{
get
{
return this.dbc;
}
}
#endregion
#region メソッド
/// <summary>
/// Instance時にDB情報設定
/// </summary>
public DBAccess()
{
try
{
String DB_PASS = Utility.DB_pass;
if (DB_PASS == null || DB_PASS.Equals(""))
{
DB_PASS = "\"\"";
}
StringBuilder sb = new StringBuilder();
/* 古いVer
sb.Append("Provider=Microsoft.Jet.OLEDB.4.0");
sb.Append(";Data Source=patrusts.mdb");
sb.Append(";Password=\"" + Utility.DB_pass + "\"");
*/
sb.Append("Provider=Microsoft.ACE.OLEDB.12.0");
sb.Append(";Data Source=" + Utility.DB_save + Utility.DB_name);
sb.Append(";Jet OLEDB:Database Password=" + DB_PASS);
sb.Append(";User ID=Admin");
strDBConnection = sb.ToString();
Console.WriteLine("\n\nDB接続 -> ");
Console.WriteLine(strDBConnection.ToString());
this.DBConnect();
}
catch (Exception ex)
{
MessageBox.Show("DB情報設定に失敗しました。");
Utility.log.err_log("[DBAccess]Exception Err : " + ex.ToString());
}
}
/// <summary>
/// DB接続
/// </summary>
/// <returns>Connection</returns>
private void DBConnect()
{
try
{
this.dbc = new OleDbConnection(strDBConnection);
}
catch (OleDbException ex)
{
MessageBox.Show("DB接続エラーです。");
Utility.log.err_log("[DBConnect]OleDBException : " + ex.ToString());
}
catch (Exception ex)
{
Utility.log.err_log("[DBConnect]Exception Err : " + ex.ToString());
}
}
/// <summary>
/// DBステータス確認
/// </summary>
/// <returns>接続:TRUE,失敗:FALSE</returns>
public Boolean DBOpen()
{
Boolean result = false;
try
{
if (dbc.State.Equals(ConnectionState.Closed))
{
//DB接続
this.dbc.Open();
result = true;
}
else if (dbc.State.Equals(ConnectionState.Open))
{
result = true;
}
}
catch (OleDbException ex)
{
result = false;
MessageBox.Show("DB接続エラーです。");
Utility.log.err_log("[DBOpen]OleDBException : " + ex.ToString());
d = DateTime.Now;
}
catch (Exception ex)
{
result = false;
MessageBox.Show("DB接続エラーです。");
Utility.log.err_log("[DBOpen]Exception Err : " + ex.ToString());
d = DateTime.Now;
}
return result;
}
/// <summary>
/// DB切断
/// </summary>
/// <returns></returns>
public Boolean DBClose()
{
Boolean result = false;
try
{
dbc.Close();
}
catch (Exception ex)
{
Utility.log.err_log("[DBClose]Exception Err : " + ex.ToString());
d = DateTime.Now;
}
return result;
}
#endregion
/// <summary>
/// Login用 レコードがあるかないかの判断のみ
/// 返り値[int型:(0.無 1.有 2.dbcの設定エラー)]
/// </summary>
/// <param name="sql_query">String型:SELECT文SQL</param>
/// <returns>int型:(0.無 1.有 2.dbcの設定エラー)</returns>
public int LoginQuery(string sql_query)
{
int res = 0;
if (dbc == null)
{
res = 2;
}
else
{
cmd = new OleDbCommand();
cmd.Connection = dbc;
cmd.CommandText = sql_query;
cmd.CommandType = CommandType.Text;
// DB接続
// DBコネクションを開く
if (DBOpen())
{
try
{
//int m = (int)cmd.ExecuteScalar();
dr = cmd.ExecuteReader(CommandBehavior.Default); //SingleResult
if (dr.HasRows == true)
{
res = 1;
}
dr.Close();
}
catch (OleDbException e)
{
MessageBox.Show("OleDbException:" + e.ToString());
d = DateTime.Now;
Utility.log.err_log("[LoginQuery]OleDbException: " + e.ToString());
}
catch (InvalidOperationException e)
{
MessageBox.Show("InvalidOperationException:" + e.ToString());
d = DateTime.Now;
Utility.log.err_log("[LoginQuery]InvalidOperationException: " + e.ToString());
}
finally
{
cmd.Dispose();
// DBコネクションを閉じる
dbc.Close();
}
}
}
return res;
}
}
}
}
よろしくお願い致します。