[Mono-dev] Debug mono ODBC ?

quandary quandary82 at hailmail.net
Sat Aug 6 05:00:20 EDT 2011


Hi, question:

In short, I want to know how I can debug ODBC with mono.
Because
A) My code just freezes at (string) reader["BEZEICHNUNG"];
and
B) mono --debug myfile.exe shows no messages

Since the available memory goes down for as long as the program runs, my
guess is that
(string) reader["BEZEICHNUNG"];
never gets a '\0' character.


Below some background info:


I'm trying to connect to an Access DB on Linux (Ubuntu 11.04, mono 2.10.2).

The way I do this:
1. Install mdbtools-dev
2. Install unixodbc-dev
3. Create an ODBC DSN entry in /etc/odbc.ini

[MyDSN]
Description = Microsoft Access Database
Database = /root/DBs/myAccessDB.mdb
Driver = /usr/lib/libmdbodbc.so
Setup =
FileUsage = 1
CPTimeout =
CPReuse =

4. Test the ODBC connection with OpenOffice base --> nothing (no error
either) with Access DB
    ODBC works for Firebird + MySQL, so no setup bug, probably
OpenOffice bug
5. Figure out whether it's a mdbtools-bug, with mdbtools-viewer (gmdb2) 
--> success, can see db + content, so no mdbtools-bug, so it's either an
ODBC or an OpenOffice bug
6. Test whether it is an ODBC or an OpenOffice bug: ODBC query with isql
--> success, I can retrieve the Access data via the ODBC connection, so
no ODBC bug, it follows it's an OpenOffice bug
7. Write a mono ODBC test program.
8. Test --> crashes on Access (same query as with isql)
9. Test whether the program is wrong: Use same program on MySQL ODBC
---> Works fine
10. It follows --> We have a mono bug here.



Here my code:

using System;
using System.Data;
using System.Data.Odbc;

namespace OdbcTest
{
    class MainClass
    {
       
        // https://help.ubuntu.com/community/ODBC
        //
http://user.services.openoffice.org/en/forum/viewtopic.php?f=40&t=1416
        // http://ngommans.ca/howto/jdbc-odbc/
        // http://www.firebirdnews.org/?p=1324
        // http://manpages.ubuntu.com/manpages/hardy/man1/isql-fb.1.html
        // http://www.mono-project.com/ODBC
       
        public static void Main (string[] args)
        {
                    // have an ODBC DSN setup named MYSQLDSN
        // that accesses a MySQL database via
        // MyODBC driver for ODBC with a
        // hostname of localhost and database test
       string connectionString =
          "DSN=MyDSN;" +
          //"";
            "UID=;" +
          "PWD=";
       //IDbConnection dbcon;
            OdbcConnection dbcon;
       dbcon = new OdbcConnection(connectionString);
       dbcon.Open();
       IDbCommand dbcmd = dbcon.CreateCommand();
       // requires a table to be created named employee
       // with columns firstname and lastname
       // such as,
       //        CREATE TABLE employee (
       //           firstname varchar(32),
       //           lastname varchar(32));
       string sql =
           "select * from ART";
       dbcmd.CommandText = sql;
      
        IDataReader reader = dbcmd.ExecuteReader();
       while(reader.Read()) {
            // Stays here forever
            string FirstName = (string) reader["BEZEICHNUNG"];
            string LastName = (string) reader["MEINHEIT"];
            Console.WriteLine("modul form: " + FirstName + " " + LastName);
       }
       // clean up
       reader.Close();
       reader = null;
     
    /*
                DataTable dt = new DataTable();
    OdbcDataAdapter da = new OdbcDataAdapter(sql,dbcon);
            da.Fill(dt); // Takes forever
            Console.WriteLine(dt.Rows.Count.ToString());
             */
           
       dbcmd.Dispose();
       dbcmd = null;
       dbcon.Close();
       dbcon = null;
        }
    }
}



More information about the Mono-devel-list mailing list