Pergunta

Existe uma maneira fácil de ler um arquivo inteiro do Access (.mdb) em um DataSet no .NET (especificamente C# ou VB)?

Ou pelo menos para obter uma lista de tabelas de um arquivo de acesso para que eu possa percorrê-lo e adicioná-las uma de cada vez em um DataSet?

Foi útil?

Solução

Obrigado pelas sugestões.Consegui usar esses exemplos para montar esse código, que parece atingir o que procuro.

Using cn = New OleDbConnection(connectionstring)
    cn.Open()
    Dim ds As DataSet = new DataSet()

    Dim Schema As DataTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    For i As Integer = 0 To Schema.Rows.Count - 1
        Dim dt As DataTable = New DataTable(Schema.Rows(i)!TABLE_NAME.ToString())

        Using adapter = New OleDbDataAdapter("SELECT * FROM " + Schema.Rows(i)!TABLE_NAME.ToString(), cn)
            adapter.Fill(dt)
        End Using

        ds.Tables.Add(dt)
    Next i
End Using

Outras dicas

Você deve ser capaz de acessá-lo usando um Conexão OleDb.

Aqui está um tutorial sobre acesso ao banco de dados usando-o para arquivos do MS Access.

Em termos de obtenção de nomes de tabelas, na minha época de VB6 eu sempre usei ADOX, não tenho certeza de como eles fazem isso no .NET agora.Embora eu saiba que existe uma tabela de sistema no arquivo de acesso - quero dizer "mso...".Eu pesquiso no Google!

EDITAR

Ah, ah! msysobjects !!xD

MSDN tem um artigo sobre como usar ADO.NET para conectar e editar registros em um banco de dados Access.Depois que sua conexão OleDB for feita, você poderá criar facilmente seu DataReader/DataAdapter e processá-lo conforme necessário.

EDITAR:Ah!Maldito seja, Rob e suas habilidades de digitação divinas!!!8^D

Há uma discussão sobre esse ponto em Menos que ponto.Aqui está um exemplo de código da discussão.

   public DataTable GetColumns(string tableName)
    {
        string[] restrictions = new string[4];
        restrictions[2] = tableName;

        _connDb.Open();

        DataTable mDT = _connDb.GetSchema("Columns", restrictions);

        _connDb.Close();

        return mDT;
    }

Sua pergunta original, conforme formulada, é um absurdo:

Existe uma maneira fácil de ler um arquivo inteiro do Access (.mdb) em ...

Você certamente não deseja todo o conteúdo do arquivo MDB.O que você deseja é o conteúdo de suas tabelas de dados armazenadas no MDB.Lembre-se de que você também não deseja o conteúdo das tabelas do sistema.

O ponto chave:

Você está perguntando sobre JET, não sobre ACCESS.

Jet é o mecanismo de banco de dados fornecido como armazenamento de dados padrão do Access (e no qual os próprios objetos do Access são armazenados).Mas "Acesso" significa algo muito mais do que apenas tabelas de dados.

Sempre que você fizer uma pergunta e confundir Access e Jet, provavelmente obterá pelo menos algumas respostas inúteis.

E você será repreendido por gente como eu, porque os desenvolvedores realmente deveriam saber que é melhor não ofuscar distinções cruciais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top