[Mono-list] Problem with ODBC Driver

Olivier Gaumond ogaumond@yahoo.com
Tue, 20 May 2003 15:37:45 -0400 (EDT)


I created the following table in MySQL test database
create table employee (firstname varchar(32), lastname varchar(32));

I can retrieve data from the database with the Mono.Data.MySql provider but not
with the ODBC provider.

I have unixODBC and MyODBC installed and working and I added a DSN to connect
to the database.  I can succesfully test the DSN and connection with unixODBC
DataManager.

To avoid errors when testing with Mono I had to symlink /usr/local/libodbc32.so
to /usr/local/libodbc.so and export LD_LIBRARY_PATH=/usr/local/lib

Here are the tests I made in sqlsharp to demonstrate the errors.

With the Mono.Data.MySql provider

SQL# \Provider MySql
The default Provider is LOADEXTPROVIDER
          Assembly: Mono.Data.MySql
  Connection Class: Mono.Data.MySql.MySqlConnection

SQL# \ConnectionString SERVER=localhost;DATABASE=test;UID=test;PASSWORD=test;
 
SQL# \Open
Attempt to open connection...
Loading external provider...
 
** (sqlsharp.exe:7934): WARNING **: Failed to load function my_thread_end from
libmySQL
 
** (sqlsharp.exe:7934): WARNING **: Failed to load function my_thread_end from
libmySQL
 
** (sqlsharp.exe:7934): WARNING **: Failed to load function my_thread_init from
libmySQL
 
** (sqlsharp.exe:7934): WARNING **: Failed to load function my_thread_init from
libmySQL
External provider loaded.
Open was successfull.

SQL# SELECT * FROM employee;
Execute SQL: SELECT * FROM employee;
Display any result sets...
Display the result set 1
Fields in Query Result: 2
 
firstname lastname
========= ========
 
Joe       Bloe
John      Smith
Scott     Tiger
 
Rows retrieved: 3

----

With the ODBC Driver

SQL# \Provider odbc
The default Provider is ODBC
 
SQL# \ConnectionString DSN=test;UID=test;PWD=test;
 
SQL# \Open
Attempt to open connection...
 
** (sqlsharp.exe:7934): WARNING **: byref boolean marshalling not inplemented
Open was successfull.
 
SQL# SELECT * FROM employee;
Execute SQL: SELECT * FROM employee;
Display any result sets...
Display the result set 1
Fields in Query Result: 2
 
firstname           lastname
=================== ===================
 
Error: System.InvalidCastException: Cannot cast from source type to destination
type
in <0x0002f> 00 System.Data.Odbc.OdbcDataReader:GetDateTime (int)
in <0x0083e> 00 Mono.Data.SqlSharp.SqlSharpCli:DisplayResult
(System.Data.IDataReader,System.Data.DataTable)
in <0x00028> 00 Mono.Data.SqlSharp.SqlSharpCli:OutputQueryResult
(System.Data.IDataReader,System.Data.DataTable)
in <0x000d7> 00 Mono.Data.SqlSharp.SqlSharpCli:DisplayData
(System.Data.IDataReader)
in <0x00106> 00 Mono.Data.SqlSharp.SqlSharpCli:ExecuteSql (string)


The driver seems to always return DateTime from GetFieldType().

To run the sample from http://www.go-mono.com/odbc.html I had to change two
lines
	string FirstName = reader["firstname"];
	string LastName = reader["lastname"];
to
	string FirstName = reader.GetString(0);
	string LastName = reader.GetString(1);


Should I fill a bug report about that?

Olivier

__________________________________________________________
Lèche-vitrine ou lèche-écran ?
magasinage.yahoo.ca