FbCommand mishandling BLOB field parameters on empty resultsets
---------------------------------------------------------------
Key: DNET-420
URL: http://tracker.firebirdsql.org/browse/DNET-420
Project: .NET Data provider
Issue Type: Bug
Components: ADO.NET Provider
Affects Versions: 2.6.5
Environment: Windows XP
Firebird 2.5.1
Reporter: Scott Morgan
Assignee: Jiri Cincura
Assume a table of form:
CREATE TABLE PHRASES ( TEXT BLOB SUB_TYPE 1 );
Then attempt the following, looking for a non-existent value:
FbCommand cmd = new FbCommand("SELECT TEXT FROM PHRASES WHERE LOWER(TEXT) LIKE
@search_str", conn))
cmd.Parameters.Add("@search_str", FbDbType.Text).Value = "dont exist"; //
<-- needs to be >7 chars long
FbDataReader reader = cmd.ExecuteReader();
An exception is thrown by ExecuteReader:
Unhandled Exception: FirebirdSql.Data.FirebirdClient.FbException: arithmetic
exception, numeric overflow, or string truncation
string right truncation ---> FirebirdSql.Data.Common.IscException: arithmetic
exception, numeric overflow, or string truncation
string right truncation
at FirebirdSql.Data.Client.Managed.Version10.XdrStream.Write(DbField param)
in
C:\projects\fb.net\source\FirebirdSql\Data\Client\Managed\Version10\XdrStream.cs:line
695
at FirebirdSql.Data.Client.Managed.Version10.XdrStream.Write(Descriptor
descriptor) in
C:\projects\fb.net\source\FirebirdSql\Data\Client\Managed\Version10\XdrStream.cs:line
650
at
FirebirdSql.Data.Client.Managed.Version10.GdsStatement.SendExecuteToBuffer() in
C:\projects\fb.net\source\FirebirdSql\Data\Client\Managed\Version10\GdsStatement.cs:line
596
at FirebirdSql.Data.Client.Managed.Version12.GdsStatement.Execute() in
C:\projects\fb.net\source\FirebirdSql\Data\Client\Managed\Version12\GdsStatement.cs:line
61
at FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteCommand(CommandBehavior
behavior, Boolean returnsSet) in
C:\projects\fb.net\source\FirebirdSql\Data\FirebirdClient\FbCommand.cs:line 1250
at FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteReader(CommandBehavior
behavior) in
C:\projects\fb.net\source\FirebirdSql\Data\FirebirdClient\FbCommand.cs:line 551
The problem seems to be the lib mistaking the field for a VARCHAR type when the
resultset is empty.
A workaround is to explicitly cast the parameter as a BLOB:
FbCommand cmd = new FbCommand("SELECT TEXT FROM PHRASES WHERE LOWER(TEXT) LIKE
CAST(@search_str" AS BLOB SUB_TYPE 1), conn))
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Firebird-net-provider mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/firebird-net-provider