DB2 - Problem description
Problem IC69553 | Status: Closed |
STORED PROCEDURE PARAMETERS CORRUPTED DURING PREPARE USING EXECUTEREADER METHOD OF ODBC INTERFACE AND C# PROGRAM | |
product: | |
DB2 FOR LUW / DB2FORLUW / 950 - DB2 | |
Problem description: | |
Problem Abstract: The parameters of a stored procedure call get corrupted during the prepare phase when using the ODBC Interface to execute the SQL with the ExecuteReader method. Client: Windows 2003 64 Bit, DB2 V9.1 FP6a 64 Bit Server: remote zOS based DB2 8.1.5 database stored procedure How easy is problem to reproduce? Easy Problem Desc: The ExecuteReader() method will produce unexpected results depending on how the stored procedure uses the corrupted stored procedure parameters. Here is a c# program that uses ODBC interface that can reproduce this defect: using System; using System.Collections.Generic; using System.Text; using System.Data.Odbc; using System.Data.OleDb; namespace testDB { class Program { static void Main(string[] args) { string cmdstr = ""; if (args.Length > 0) { cmdstr = args[0]; } TestODBCDB2(cmdstr); } static void TestODBCDB2(String cmdstr) { // create and open a new connection try { // open the connection Console.WriteLine("Openning connection...."); String connStr = "DSN=SAMPLE;UID=UserID;PWD=password;DATABASE=SAMPLE;WSID=serv erName"; OdbcConnection Conn = new OdbcConnection(connStr); Conn.Open(); OdbcCommand command = new OdbcCommand("call TEST_STORED_PROC ('Param1',0);"); command.Connection = Conn; OdbcDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.SequentialAcce ss); Console.WriteLine("printing result"); while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { Console.Write(reader.GetValue(i)); Console.Write("\t"); } Console.WriteLine(""); } command.Dispose(); Console.WriteLine("done"); } catch (Exception e) { Console.WriteLine(e.ToString()); Console.WriteLine(e.StackTrace); } } } } | |
Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * ALL * **************************************************************** * PROBLEM DESCRIPTION: * * Problem Abstract: * * * * The parameters of a stored procedure call get corrupted * * during * * the prepare phase when using the ODBC Interface to execute * * the * * SQL with the ExecuteReader method. * * * * * * * * Client: Windows 2003 64 Bit, DB2 V9.1 FP6a 64 Bit * * * * Server: remote zOS based DB2 8.1.5 database stored procedure * * * * * * * * How easy is problem to reproduce? Easy * * * * * * * * Problem Desc: * * * * The ExecuteReader() method will produce unexpected results * * * * depending on how the stored procedure uses the corrupted * * stored * * procedure parameters. * * * * * * * * Here is a c# program that uses ODBC interface that can * * reproduce * * this defect: * * * * using System; * * * * using System.Collections.Generic; * * * * using System.Text; * * * * using System.Data.Odbc; * * * * using System.Data.OleDb; * * * * * * * * namespace testDB * * * * { * * * * class Program * * * * { * * * * static void Main(string[] args) * * * * { * * * * string cmdstr = ""; * * * * if (args.Length > 0) * * * * { * * * * cmdstr = args[0]; * * * * } * * * * TestODBCDB2(cmdstr); * * * * } * * * * * * * * static void TestODBCDB2(String cmdstr) * * * * { * * * * // create and open a new connection * * * * try * * * * { * * * * // open the connection * * * * Console.WriteLine("Openning * * connection...."); * * String connStr = * * * * "DSN=SAMPLE;UID=UserID;PWD=password;DATABASE=SAMPLE;WSID=serv * * * erName"; * * * * OdbcConnection Conn = new * * * * OdbcConnection(connStr); * * * * Conn.Open(); * * * * OdbcCommand command = new OdbcCommand("call * * * * TEST_STORED_PROC ('Param1',0);"); * * * * command.Connection = Conn; * * * * OdbcDataReader reader = * * * * command.ExecuteReader(System.Data.CommandBehavior.SequentialAc * ss); * * * * Console.WriteLine("printing result"); * * * * while (reader.Read()) * * * * { * * * * for (int i = 0; i < reader.FieldCount; * * i++) * * { * * * * Console.Write(reader.GetValue(i)); * * * * Console.Write("\t"); * * * * } * * * * Console.WriteLine(""); * * * * } * * * * command.Dispose(); * * * * Console.WriteLine("done"); * * * * } * * * * * * * * catch (Exception e) * * * * { * * * * Console.WriteLine(e.ToString()); * * * * Console.WriteLine(e.StackTrace); * * * * } * * * * } * * * * } * * * * } * **************************************************************** * RECOMMENDATION: * * Upgrade to DB2 V9.5 Fix Pack 7 or follow the suggested * * circumvention * **************************************************************** | |
Local Fix: | |
Do not use the Executereader method. Prepare and execute the SQL statement that calls a stored procedure separately. | |
available fix packs: | |
DB2 Version 9.5 Fix Pack 7 for Linux, UNIX, and Windows | |
Solution | |
Problem was first fixed in Version 9.5 Fix Pack 7 | |
Workaround | |
not known / see Local fix | |
Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 29.06.2010 19.10.2010 19.10.2010 |
Problem solved at the following versions (IBM BugInfos) | |
9.5.FP7 | |
Problem solved according to the fixlist(s) of the following version(s) | |
9.1.0.7 | |
9.5.0.7 |