[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