[Mono-list] Still problems with database access using ODBC

lunkwill at gmx.net lunkwill at gmx.net
Thu Jul 7 03:50:25 EDT 2005


Hi all!

Nearly 2 months ago I posted a bug (
http://bugzilla.ximian.com/show_bug.cgi?id=74917 ) about using SQL
parameters in ODBC queries.
In short: using OdbcParameter with int-parameters works; with char and
varchar-parameters it fails

As I got no anwers/solution so far, I just want to know 
a) if anybody else experiences these problems
b) if someone is working on the ODBC-code in general or concerning my
problem

The bug report is a bit lengthy and originally refers to Mono 1.1.7. My
latest tests with Mono 1.1.8.2 still have the same problem.
I was testing with 
a) Mono 1.1.8.2/Linux (SLES9)/unixODBC 2.2.11
b) Mono 1.1.8 Win Installer/ODBC
c) M$ .NET 1.1/ODBC

I have testet with Informix and FirebirdSQL which lead to different error
messages. The result is the same: it works with .NET and fails using Mono
Test case see below or in the mentioned bug report

Any help would be appreciated! Pls. send answers to the list.

/daniel

/***********************************************/

My DB tables + contens:
SQL> show table t_odbc_test;
ID                              SMALLINT Not Null
LAST_NAME                       VARCHAR(20) Nullable
FIRST_NAME                      CHAR(20) Nullable
TESTINT                         INTEGER Nullable
CONSTRAINT PK_T_ODBC_TEST:
  Primary key (ID)
SQL> select * from t_odbc_test;

     ID LAST_NAME            FIRST_NAME                TESTINT
======= ==================== ==================== ============

      1 Dent                 Arthur                         10
      2 Prefect              Ford                           20


My test program:

class MainClass
{
   public static void Main(string[] args)
   {
      string dsn = args[0]; // the ODBC DSN
      string typ = args[1]; // varchar|char|int

      string DB_CONN = "DSN=" + dsn;

      Console.WriteLine("act. DSN:      " + DB_CONN);
      Console.WriteLine("act. OdbcType: " + typ);

      using (OdbcConnection conn = new OdbcConnection(DB_CONN)) {
         conn.Open();
         OdbcCommand cmdFail = conn.CreateCommand();
         cmdFail.CommandType = CommandType.Text;

         switch (typ) {
            case "varchar": // last_name is of type VarChar
               cmdFail.CommandText =
                  "SELECT * FROM t_odbc_test WHERE last_name=?";
                  cmdFail.Parameters.Add("@p1",
OdbcType.VarChar,20).Value = "Perfect";
               break;
            case "char": // first_name is of type Char
               cmdFail.CommandText =
                  "SELECT * FROM t_odbc_test WHERE first_name=?";
                  cmdFail.Parameters.Add("@p1",
OdbcType.Char,20).Value = "Ford%";
               break;
            case "int": // testint is of type Integer
            default:
               cmdFail.CommandText =
                  "SELECT * FROM t_odbc_test WHERE testint=?";
               cmdFail.Parameters.Add("@p1", OdbcType.Int).Value = 20;

               break;
         }

         OdbcDataReader readerFail = cmdFail.ExecuteReader();

         while (readerFail.Read())
            Console.WriteLine("--> " + readerFail["LAST_NAME"]);

         readerFail.Close();
         Console.WriteLine("------------------------------------------");
      }
   }
}

-- 
Weitersagen: GMX DSL-Flatrates mit Tempo-Garantie!
Ab 4,99 Euro/Monat: http://www.gmx.net/de/go/dsl


More information about the Mono-list mailing list