Solved

ADO.NET compact DB, export/import table

Posted on 2004-04-28
6
1,216 Views
Last Modified: 2008-03-10
G'day everyone

These tasks were simple in DAO, so hopefully can be done in ADO.NET using VB.NET, i'm working with an access database
i would like to be able to...

* compact and repair the db
* export a table (fast, i'm going to be exporting about 500,000 records)
* import the data i exported back into a table.

Any help will be very helpful!

Cheers :-)
0
Comment
Question by:undy2
  • 3
  • 3
6 Comments
 
LVL 5

Expert Comment

by:tgannetts
ID: 10938711
See the following link for Microsoft's recommendations on compacting/repairing an Access database:

http://support.microsoft.com/default.aspx?scid=kb;en-us;306287

It states that compacting and repairing cannot be achieved through ADO.NET and instead you need to access the Microsoft Jet OLE DB Provider and Replication Objects (JRO).

As far as your other queries are concerned, there are a number of methods for exporting/importing tables. The best one depends on what you intend to do with the data - export to another access database, export to excel, export to a csv file?

What kind of exporting/importing will you be doing?

Tom
0
 

Author Comment

by:undy2
ID: 10938786
Hey tom..

well the clients of my application will not have MS access installed on their PC's... i pretty much want a fast and effective way to export data out of the database to a file, and then back into the database. I'll do it with any file format, i have learnt with ADO.NET that some things work faster than others, so whatever is fastest!

Cheers :-)
0
 
LVL 5

Accepted Solution

by:
tgannetts earned 62 total points
ID: 10939471
You could import/export the database data to and from an XML file:

Public sub CreateXMLFile(byval oDs as DataSet)

    'Create a file name to write to.
    Dim filename As String = "c:\Test.xml"
   
    'Create the FileStream to write with.
    Dim myFileStream As New System.IO.FileStream(filename, System.IO.FileMode.Create)
   
    'Create an XmlTextWriter with the fileStream.
    Dim myXmlWriter As New System.Xml.XmlTextWriter (myFileStream, System.Text.Encoding.Unicode)
   
    'Write to the file with the WriteXml method.
    oDs.WriteXml(myXmlWriter)
    myXmlWriter.Close()

End Sub

Public sub ReadXMLFile(byval location as string) as DataSet

    'Create a new DataSet.
    Dim oDs As New DataSet("New DataSet")
     
    ' Create new FileStream to read schema with.
    Dim fsReadXml As New System.IO.FileStream(location, System.IO.FileMode.Open)
   
    'Create an XmlTextReader to read the file.
    Dim myXmlReader As New System.Xml.XmlTextReader(fsReadXml)
   
    'Read the XML document into the DataSet.
    oDs.ReadXml(myXmlReader)
    ' Close the XmlTextReader
    myXmlReader.Close()

    Return oDs

End sub

Tom
0
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 

Author Comment

by:undy2
ID: 10940292
hey tom...

the CreateXMLFile() is working like a charm

although i am having trouble with the ReadXMLFile().. here is what i got so far..

    Public Sub loadTable()
        Dim mDataAdapter As New OleDb.OleDbDataAdapter
        Dim mDataSet As New System.Data.DataSet
        Dim mConn As OleDb.OleDbConnection
        Dim mCommandBuilder As OleDb.OleDbCommandBuilder
        Try
            mDataSet = ReadXMLFile("c:\Test.xml")
            mDataAdapter.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM testTable;", mConn)
            mCommandBuilder = New OleDb.OleDbCommandBuilder(mDataAdapter)
            mDataAdapter.Fill(mDataSet)
            mDataAdapter.Update(mDataSet)
            mDataSet.AcceptChanges()
        Catch
            MsgBox(Err.Description)
        End Try
    End Sub

it comes up with the error "syntax error in INSERT INTO statement" on the line "mDataAdapter.Update(mDataSet)"

maybe this isn't the best/easiest way of saving to a table, i only converted to ADO.NET from DAO about 3 days ago..

Cheers :-)
0
 
LVL 5

Expert Comment

by:tgannetts
ID: 10947565
Use the following code instead:

Public Sub loadTable()

     Dim mDataAdapter As New OleDb.OleDbDataAdapter
     Dim mDataSet As New System.Data.DataSet
     Dim mConn As OleDb.OleDbConnection
     Dim mCommandBuilder As OleDb.OleDbCommandBuilder
     Try
         mDataAdapter.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM testTable;", mConn)
         mCommandBuilder = New OleDb.OleDbCommandBuilder(mDataAdapter)
         mDataAdapter.FillSchema(mDataSet, SchemaType.Mapped)

         mDataSet = ReadXMLFile("c:\Test.xml")
         
         mDataAdapter.Update(mDataSet.Tables(0))
         mDataSet.AcceptChanges()

     Catch ex as exception
         MsgBox(ex.message)
     End Try
End Sub

To be able to store the changes in the data set, you will need to modify the ReadXML and WriteXML functions:

Update the ReadXML line to:

oDs.ReadXml(myXmlReader, XmlReadMode.DiffGram)

Update the WriteXML line to:

oDs.WriteXml(myXmlReader, XmlWriteMode.DiffGram)

This will store the row state in the XML file, otherwise each row state following the fill operation will be set to Added, and all the rows will be added, rather than the appropriate command e.g. delete or update.

Hope this helps (and works...)

Tom.
0
 

Author Comment

by:undy2
ID: 10956251
Thanks for the help! it's working like a charm :-)
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

This article explains how to create and use a custom WaterMark textbox class.  The custom WaterMark textbox class allows you to set the WaterMark Background Color and WaterMark text at design time.   IMAGE OF WATERMARKS STEPS Create VB …
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now