1

こんにちは、C# は初めてで、.accdb アクセス 2010 データベースに接続しようとしています。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            OleDbConnection connect = new OleDbConnection();
            connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Web Develop\Documents\Storekeeper\storekeeper.accdb;Persist Security Info=False;";
            connect.Open();
            MessageBox.Show("Connection open");
        }
    }
}

そして、私はこの例外を受け取ります:

System.Data.OleDb.OleDbExceptionSystem.Data.dllで、タイプの最初のチャンスの例外が発生しました

データベースは使用されておらず、パスは正しいですが、どうすればよいですか?

4

4 に答える 4

4

InnerExceptionスローされた例外には、調べることができるプロパティが必要です。正確なエラーが何であるかを教えてくれます。それを確認するには、例外をキャッチしてから、InnerException メッセージを表示する必要があります。

private void Form1_Load(object sender, EventArgs e)
{
    try
    {
        OleDbConnection connect = new OleDbConnection();
        connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Web Develop\Documents\Storekeeper\storekeeper.accdb;Persist Security Info=False;";
        connect.Open();
        MessageBox.Show("Connection open");
    }
    catch (OleDbException e)
    {
        Messagebox.Show(e.InnerException.Message);
    }
}

OleDbExceptionOleDbExceptionの MSDN ページに、に埋め込まれたエラーをキャプチャして表示するための追加のサンプル コードがあります。

于 2013-05-03T17:22:43.947 に答える
1

Ok。64 ビット O/S で Office 32 ビットを使用している場合は、適合します。「プラットフォーム出力」を x86 に変更してみてください。プロジェクトのプロパティに移動し、[ビルド] タブを見つけます。「プラットフォームターゲット」がそこにリストされているはずです。

たとえそれが機能したとしても、その決定の影響を調査する必要があります。しかし、少なくとも「あなたは知っているだろう」。

編集 - - - - - - -

これがあなたの順列です。そして、あなたはそれらを試してみる必要があります。

  1. 接続文字列、正しいか間違っているか。前述の「12」対「14」。(すみません、リンクはExcelについてです。「TS」からの提案を使用してみてください。)

  2. Office 32 ビットがインストールされています。そのマシンに「AccessDatabaseEngine_x64.exe」をインストールしようとすると、「Office のバージョンが正しくありません」というエラーが表示されると思います。

  3. #2のため、「AccessDatabaseEngine.exe」をインストールする必要があります。これは32ビットです。

  4. 「プラットフォーム出力」。今私は~~思う~~ #3のために、x86に設定して実験する必要があります.

x86 に戻してから、接続文字列で「12」と「14」を試してみてください。

編集 - - - - - - - - -

インターネットからファイルを取得しました。

http://old.cba.ua.edu/~jomason/ac289/289AccessFiles.htmlの Oren.accdb

そして、これを自分のマシンでコーディングしました。そして、それは機能します。

  private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            using (OleDbConnection connect = new OleDbConnection())
            {
                connect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\folder1\data\Oren.accdb;Persist Security Info=False;";
                connect.Open();

                OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = connect;
                cmd.CommandText = "Select * from Agreement";

                StringBuilder sb = new StringBuilder();
                IDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine(reader[0].ToString());
                    sb.Append(string.Format("{0}, {1}", reader[0].ToString(), reader[1].ToString()) + System.Environment.NewLine);
                }
                reader.Close();

                ReportMessage(sb.ToString());

            }
        }
        catch (System.Data.OleDb.OleDbException lolex)
        {
            ReportException(lolex);
        }
        catch (Exception ex)
        {
            ReportException(ex);
        }

    }




  private void ReportException(Exception ex)
    {
        txtStatus.Text = ex.Message;
    }


    private void ReportException(System.Data.OleDb.OleDbException oleex)
    {

        StringBuilder sb = new StringBuilder();
        sb.Append(oleex.ErrorCode + System.Environment.NewLine);
        sb.Append(oleex.Message + System.Environment.NewLine );
        txtStatus.Text = sb.ToString();
    }

    private void ReportMessage(string msg)
    {
        txtStatus.Text = msg;
    }

編集

プログラム「Microsoft Access」でファイル「storekeeper.accdb」を開くことができますか。パスワードで保護されていませんか?

于 2013-05-03T18:07:31.937 に答える
1

これは簡単だと思います。Office 2010 を使用しているので、Microsoft.ACE.OLEDB が必要だと思います。14.0 _

于 2013-05-03T17:35:24.990 に答える
0

接続文字列のデータ ソース パスに二重スラッシュを付ける必要があります。たとえば、'Data Source=C:\folder1\data\Oren.accdb;Persist Security Info=False;";'

于 2016-10-20T21:09:00.117 に答える