'**************************************************************************** ' (c) Copyright IBM Corp. 2007 All rights reserved. ' ' The following sample of source code ("Sample") is owned by International ' Business Machines Corporation or one of its subsidiaries ("IBM") and is ' copyrighted and licensed, not sold. You may use, copy, modify, and ' distribute the Sample in any form without payment to IBM, for the purpose of ' assisting you in the development of your applications. ' ' The Sample code is provided to you on an "AS IS" basis, without warranty of ' any kind. IBM HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR ' IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ' MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Some jurisdictions do ' not allow for the exclusion or limitation of implied warranties, so the above ' limitations or exclusions may not apply to you. IBM shall not be liable for ' any damages you suffer as a result of using, copying, modifying or ' distributing the Sample, even if IBM has been advised of the possibility of ' such damages. '**************************************************************************** ' ' SOURCE FILE NAME: SpClient.vb ' ' SAMPLE: Call different types of stored procedures from SpServer.vb ' ' '**************************************************************************** ' ' Steps to run the sample with the command line window: ' ' I) If you have a compatible nmake program on your system, ' do the following: ' ' 1. Compile this server source file, SpServer.vb. This ' erases any existing assembly of the same name and copies ' the newly compiled assembly SpServer.dll from the ' current directory to the $(DB2PATH)\function directory). ' This also runs a batchfile SpCat that executes SQL to ' drop (if already existing) and create the stored ' procedures in DB2 that have their procedure-body ' implemented by the methods in this file, SpServer.vb: ' ' nmake/make SpServer ' ' To run SpClient successfully you must have succesfully ' completed step 1 in order to be able to call the stored ' procedures. ' ' 2. Compile the client source file SpClient.vb. ' ' nmake/make SpClient ' ' 3. Run the client SpClient: ' ' SpClient ' ' II) If you don't have a compatible nmake program on your ' system do the following: ' ' 1. Compile the SpServer.vb file with bldrn.bat, to compile ' the C# stored procedure implementations that the client ' application will call. Do this by entering the following ' at the command prompt: ' ' bldrtn SpServer ' ' This will compile SpServer.vb and copy the assembly file ' SpServer.dll from the current directory to the DB2 function ' directory: $(DB2PATH)\function. It will first remove any ' existing assemblies with the same name first. ' ' 2. Create the stored procedures in DB2 by entering the following at ' the command prompt: ' ' spcat ' ' This will drop the procedures from DB2, if they exist, and ' then executes SQL CREATE PROCEDURE statements to create the ' procedures in DB2. These statements associate each procedure ' name with an external C# method in the assembly SpServer.dll ' that is in the DB2 function directory. ' ' 3. Compile the SpClient.vb file with the bldapp.bat batch file by ' entering the following at the command prompt: ' ' bldapp SpClient ' ' 4. Run the SpClient program by entering the program name at ' the command prompt: ' ' SpClient ' ' SpClient calls several methods that call the stored procedures: ' ' 1. CallOutLanguage: returns language of the stored procedure ' library ' Parameter types used: OUT CHAR(8), OUT INTEGER, OUT VARCHAR(32) ' 2. CallOutParameter: return median salary of EMPLOYEE table ' Parameter types used: OUT DECIMAL, OUT INTEGER, OUT VARCHAR(32) ' ' 3. CallInParameters: accepts 3 salary values and a department name ' and updates the salaries in the EMPLOYEE table according to some logic ' Parameter types used: IN DECIMAL(9,2) ' IN DECIMAL(9,2) ' IN DECIMAL(9,2) ' IN CHAR(3) ' OUT INTEGER, ' OUT VARCHAR(32) ' 4. CallInOutParameter: accepts an input value and returns ' the median salary of the EMPLOYEE table for employees who ' make more than the input value. ' Parameter types used: INOUT DECIMAL, OUT INTEGER, OUT VARCHAR(32) ' ' 5. CallOneResultSet: returns a result set to the client ' application ' Parameter types used: IN DECIMAL, OUT INTEGER, OUT VARCHAR(32) ' ' 6. callClobExtract: returns a string sub-section of a CLOB ' Parameter types used: IN CHAR(6) ' OUT VARCHAR(1000) ' OUT INTEGER ' OUT VARCHAR(32) ' 7. CallAllDataTypes: uses all of the common data types in a ' stored procedure ' Parameter types used: INOUT SMALLINT ' INOUT INTEGER ' INOUT BIGINT ' INOUT REAL ' INOUT DOUBLE ' OUT CHAR(1) ' OUT CHAR(15) ' OUT VARCHAR(12) ' OUT DATE ' OUT TIME ' OUT INTEGER ' OUT VARCHAR(32) ' ' ***************************************************************************** ' The .NET stored procedures in this sample are implemented using ' parameter style GENERAL; this is the recommended parameter style. ' ' For examples of .NET procedures written in other parameter styles, ' please see the related documentation topics in the Information Center ' or in the Application Development Guide: Server Applications. ' Search for: Examples of CLR procedures in C# ' ***************************************************************************** ' ' SQL Statements USED: ' CALL ' SELECT ' ' DB2 .NET Data Provider Classes USED: ' DB2Connection ' DB2Command ' DB2Transaction ' ' SpClient SpClient '****************************************************************************** ' 'For more information on the sample programs, see the README file. ' 'For information on developing applications, see the Application 'Development Guide. ' 'For information on using SQL statements, see the SQL Reference. ' 'For the latest information on programming, compiling, and running DB2 'applications, visit the DB2 Information Center at ' http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp ' '****************************************************************************** Imports System Imports System.Data Imports Microsoft.VisualBasic Imports IBM.Data.DB2 Public Class SpClient Shared Dim outMedian As Decimal = 0 ' Global variable ' - set by CallOutParameter Public Shared Sub Main(args() As String) ' Declare a DB2Connection and a DB2Transaction Dim conn As DB2Connection Dim trans As DB2Transaction ' Declare a String to store the output from CallOutLanguage() Dim language As String = "" Try Console.WriteLine( _ vbNewLine & _ " THIS SAMPLE SHOWS HOW TO CALL THE STORED" & _ " PROCEDURES IN SpServer.vb") Console.WriteLine() ' Connect to a database Console.WriteLine(" Connecting to a database ...") conn = ConnectDb(args) ' Return the language in which the stored procedures are implemented trans=conn.BeginTransaction() language = CallOutLanguage(conn, trans) ' Display the mean salary of the EMPLOYEE table trans=conn.BeginTransaction() CallOutParameter(conn, trans) ' Update salaries in the EMPLOYEE table trans=conn.BeginTransaction() CallInParameters(conn, trans) ' Display the median salary of the EMPLOYEE table for employees who ' make more than 'outMedian' trans=conn.BeginTransaction() CallInoutParameter(conn, outMedian, trans) ' Display the median salary of the EMPLOYEE table for employees who ' make more than 99999.99 trans=conn.BeginTransaction() CallInoutParameter(conn, 99999.99, trans) ' Obtains and displays a result set trans=conn.BeginTransaction() CallOneResultSet(conn, trans) ' Obtain and display a sub-section of a CLOB data type trans=conn.BeginTransaction() CallClobExtract("000140", conn, trans) ' Use all the common data types in a stored procedure trans=conn.BeginTransaction() CallAllDataTypes(conn, trans) ' Disconnect from the database Console.WriteLine( _ vbNewLine & " Disconnect from the database") conn.Close() Catch e As Exception Console.WriteLine(e.Message) Try conn.Close() Catch x As Exception Console.WriteLine(x.Message) End Try End Try End Sub ' Main ' This method establishes a connection to a database Public Shared Function ConnectDb(argv() As String) As DB2Connection Dim server As String Dim dbalias As String Dim userId As String Dim password As String Dim portNumber As Int32 = -1 Dim connectString As String If (argv.Length > 5) Then Throw new Exception( _ "Usage: prog_name [dbAlias] [userId passwd]" & vbNewLine & _ " prog_name [dbAlias] server portNum userId passwd") Else If (argv.Length = 1) Then If( String.Compare(argv(0),"?") = 0 Or _ String.Compare(argv(0),"-?") = 0 Or _ String.Compare(argv(0),"/?") = 0 Or _ String.Compare(argv(0),"-h",true) = 0 Or _ String.Compare(argv(0),"/h",true) = 0 Or _ String.Compare(argv(0),"-help",true) = 0 Or _ String.Compare(argv(0),"/help",true) = 0 ) Then Throw new Exception( _ "Usage: prog_name [dbAlias] [userId passwd]" & vbNewLine & _ " prog_name [dbAlias] server portNum userId passwd") End If End If End If Select Case (argv.Length) Case 0 ' Use all defaults dbalias = "sample" userId = "" password = "" Case 1 ' dbAlias specified dbalias = argv(0) userId = "" password = "" Case 2 ' userId & passwd specified dbalias = "sample" userId = argv(0) password = argv(1) Case 3 ' dbAlias, userId & passwd specified dbalias = argv(0) userId = argv(1) password = argv(2) Case 4 ' use default dbAlias dbalias = "sample" server = argv(0) portNumber = Convert.ToInt32(argv(1)) userId = argv(2) password = argv(3) Case 5 ' everything specified dbalias = argv(0) server = argv(1) portNumber = Convert.ToInt32(argv(2)) userId = argv(3) password = argv(4) End Select If(portNumber = -1) Then connectString = "Database=" & dbalias Else connectString = "Server=" & server & ":" & portNumber & _ ";Database=" & dbalias End If If (userId <> "") connectString += ";UID=" & userId & ";PWD=" & password End If Dim conn As DB2Connection = new DB2Connection(connectString) conn.Open() Console.WriteLine(" Connected to the " & dbalias & " database") Return conn End Function ' ConnectDb ' This method returns the language in which the stored procedures are ' implemented Public Shared Function CallOutLanguage(conn As DB2Connection, _ trans As DB2Transaction) As String Dim outLang As String = "" Try ' Create a DB2Command to execute the stored procedure OUT_LANGUAGE Dim procName As String = "OUT_LANGUAGE" Dim callsmt As String = "CALL " & procName & "(?, ?, ?)" Dim cmd As DB2Command = conn.CreateCommand() Dim outReturnCode As Int32 = 0 Dim outErrorMsg As String = "" Dim parm As DB2Parameter cmd.Transaction = trans cmd.CommandText = callsmt cmd.CommandType = CommandType.Text ' Register output parameters for the DB2Command parm = cmd.Parameters.Add("@language", DB2Type.Char, 8) parm.Direction = ParameterDirection.Output cmd.Parameters.Add("@outReturnCode", DB2Type.Integer) parm.Direction = ParameterDirection.Output cmd.Parameters.Add("@outErrorMsg", DB2Type.VarChar) parm.Direction = ParameterDirection.Output ' Call the stored procedure Console.WriteLine() Console.WriteLine(" Call stored procedure named " & procName) cmd.ExecuteNonQuery() ' Retrieve output parameters outLang = CType(cmd.Parameters("@language").Value, String) outReturnCode = CType(cmd.Parameters("@outReturnCode").Value, Integer) outErrorMsg = CType(cmd.Parameters("@outErrorMsg").Value, String) If outReturnCode < 0 Console.Writeline( _ " Stored procedure failed with return code: " & outReturnCode) If outErrorMsg <> "" Console.Writeline( _ " Error message: " & outErrorMsg.Trim()) Else Console.Writeline( _ " No error message returned.") End If Else Console.WriteLine( _ " Stored procedure is implemented in language " & outLang) End If ' Rollback the transaction to restore SAMPLE ' database to original state trans.Rollback() Catch e As Exception trans.Rollback() Console.WriteLine(e) End Try Return outLang End Function ' CallOutLanguage ' This method displays the mean salary of the EMPLOYEE table Public Shared Sub CallOutParameter(conn As DB2Connection, _ trans As DB2Transaction) Try ' Create a DB2Command to execute the stored procedure OUT_PARAM Dim procName As String = "OUT_PARAM" Dim cmd As DB2Command = conn.CreateCommand() cmd.Transaction = trans cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = procName ' Register the output parameters for the DB2Command Dim parm As DB2Parameter = cmd.Parameters.Add("@medianSalary", _ DB2Type.Decimal, _ 7) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outReturnCode", DB2Type.Integer) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outErrorMsg", DB2Type.VarChar, 32) parm.Direction = ParameterDirection.Output ' Call the stored procedure Console.WriteLine() Console.WriteLine(" Call stored procedure named " & procName) cmd.ExecuteNonQuery() ' Retrieve output parameters outMedian = CType(cmd.Parameters("@medianSalary").Value, Decimal) Dim outReturnCode As Int32 outReturnCode = CType(cmd.Parameters("@outReturnCode").Value, Int32) Dim outErrorMsg As String outErrorMsg = CType(cmd.Parameters("@outErrorMsg").Value, String) If outReturnCode < 0 Console.Writeline( _ " Stored procedure failed with return code: " & outReturnCode) If outErrorMsg <> "" Console.Writeline( _ " Error message: " & outErrorMsg.Trim()) Else Console.Writeline( _ " No error message returned.") End If Else Console.WriteLine(" " & procName & " completed successfully") Console.WriteLine(" Median salary returned from " & procName & _ " = " & FormatNumber(outMedian,2)) End If ' Rollback the transaction to restore SAMPLE ' database to original state trans.Rollback() Catch e As Exception trans.Rollback() Console.WriteLine(e) End Try End Sub ' CallOutParameter ' This method updates salaries in the EMPLOYEE table according to 3 values Public Shared Sub CallInParameters(conn As DB2Connection, _ trans As DB2Transaction) Try ' Create a DB2Command to execute a query from 'employee' and the ' CALL statement for IN_PARAMS Dim procName As String = "IN_PARAMS" Dim callsmt As String = "CALL " & procName & "(?, ?, ?, ?, ?, ?)" Dim cmd As DB2Command = conn.CreateCommand() Dim parm as DB2Parameter Dim reader as DB2DataReader cmd.Transaction = trans ' Display total salary before calling IN_PARAMS cmd.CommandText = "SELECT SUM(salary) FROM employee WHERE workdept = ?" cmd.Parameters.Add("@dept",DB2Type.Char,8).Value = "E11" reader = cmd.ExecuteReader() reader.Read() Dim sumSalary As Decimal = CType(reader.GetDecimal(0), Decimal) reader.Close() Console.WriteLine() Console.WriteLine(" Sum of salaries for dept. E11 = " & _ FormatNumber(sumSalary,2) & " before " & procName) ' Prepare DB2Command for calling IN_PARAMS and register input and ' output parameters cmd.CommandText = callsmt cmd.Parameters.RemoveAt("@dept") parm = cmd.Parameters.Add("@lowSal", DB2Type.Decimal, 7) parm.Direction = ParameterDirection.Input parm = cmd.Parameters.Add("@medSal", DB2Type.Decimal, 7) parm.Direction = ParameterDirection.Input parm = cmd.Parameters.Add("@highSal", DB2Type.Decimal, 7) parm.Direction = ParameterDirection.Input parm = cmd.Parameters.Add("@dept", DB2Type.Char, 8) parm.Direction = ParameterDirection.Input parm = cmd.Parameters.Add("@outReturnCode", DB2Type.Integer) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outErrorMsg", DB2Type.VarChar, 32) parm.Direction = ParameterDirection.Output ' Initialize parameters cmd.Parameters("@lowSal").Value = 15000 cmd.Parameters("@medSal").Value = 20000 cmd.Parameters("@highSal").Value = 25000 cmd.Parameters("@dept").Value = "E11" cmd.Parameters("@outReturnCode").Value = 0 cmd.Parameters("@outErrorMsg").Value = "" ' Call the stored procedure Console.WriteLine() Console.WriteLine(" Call stored procedure named " & procName) cmd.ExecuteNonQuery() ' Retrieve output parameters Dim outReturnCode As Int32 outReturnCode = CType(cmd.Parameters("@outReturnCode").Value, Int32) Dim outErrorMsg As String outErrorMsg = CType(cmd.Parameters("@outErrorMsg").Value, String) If outReturnCode < 0 Console.Writeline( _ " Stored procedure failed with return code: " & outReturnCode) If outErrorMsg <> "" Console.Writeline( _ " Error message: " & outErrorMsg.Trim()) Else Console.Writeline( _ " No error message returned.") End If Else Console.WriteLine(" " & procName & " completed successfully") ' Display total salary after calling IN_PARAMS cmd.CommandText = "SELECT SUM(salary)" & _ " FROM employee " & _ " WHERE workdept = ?" cmd.Parameters.Clear() cmd.Parameters.Add("@dept",DB2Type.Char,8).Value = "E11" reader = cmd.ExecuteReader() reader.Read() sumSalary = CType(reader.GetDecimal(0), Decimal) reader.Close() Console.WriteLine(" Sum of salaries for dept. E11 = " & _ FormatNumber(sumSalary,2) & " after " & procName) End IF ' Rollback the transaction to restore SAMPLE ' database to original state trans.Rollback() Catch e As Exception trans.Rollback() Console.WriteLine(e) End Try End Sub ' CallInParameters ' This method displays the median salary of the EMPLOYEE table for ' employees who make more than 'median' Public Shared Sub CallInoutParameter(conn As DB2Connection, _ median As Decimal, _ trans As DB2Transaction) Try ' Create a DB2Command to execute the stored procedure INOUT_PARAM Dim procName As String = "INOUT_PARAM" Dim cmd As DB2Command = conn.CreateCommand() cmd.Transaction = trans cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = procName ' Register input-output and output parameters for the DB2Command Dim parm As DB2Parameter = cmd.Parameters.Add("@medianSalary", _ DB2Type.Decimal, _ 7) parm.Direction = ParameterDirection.InputOutput ' Set input parameter to median value passed back by OUT_PARAM parm.Value = median parm = cmd.Parameters.Add("@outReturnCode", DB2Type.Integer) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outErrorMsg", DB2Type.VarChar,32) parm.Direction = ParameterDirection.Output ' Call the stored procedure Console.WriteLine() Console.WriteLine(" Call stored procedure named " & procName) If (Equals(median,99999.99)) Then Console.WriteLine(" with an input value that causes a NOT FOUND" & _ " error") End If cmd.ExecuteNonQuery() ' Retrieve output parameters Dim inoutMedian As Decimal Dim outReturnCode As Int32 Dim outErrorMsg As String inoutMedian = CType(cmd.Parameters("@medianSalary").Value, Decimal) outReturnCode = CType(cmd.Parameters("@outReturnCode").Value, String) outErrorMsg = CType(cmd.Parameters("@outErrorMsg").Value, String) If outReturnCode < 0 Console.Writeline( _ " Stored procedure failed with return code: " & outReturnCode) If outErrorMsg <> "" Console.Writeline( _ " Error message: " & outErrorMsg.Trim()) Else Console.Writeline( _ " No error message returned.") End If Else Console.WriteLine(" " & procName & " completed successfully") Console.WriteLine(" Median salary returned from " & procName & _ " = " & FormatNumber(inoutMedian,2)) End If ' Rollback the transaction to restore SAMPLE ' database to original state trans.Rollback() Catch e As Exception trans.Rollback() Console.WriteLine(e) End Try End Sub ' CallInoutParameter ' This method obtains and displays a result set Public Shared Sub CallOneResultSet(conn As DB2Connection, _ trans As DB2Transaction) Try ' Create a DB2Command to execute the CALL statement for ' ONE_RESULT_SET Dim procName As String = "ONE_RESULT_SET" Dim callsmt As String = "CALL " & procName & "(?, ?, ?)" Dim cmd As DB2Command = conn.CreateCommand() Dim parm as DB2Parameter cmd.Transaction = trans cmd.CommandText = callsmt cmd.CommandType = CommandType.Text ' Register input and output parameters for the CALL statement parm = cmd.Parameters.Add("@salThreshold", DB2Type.Decimal, 7) parm.Direction = ParameterDirection.Input ' Set input parameter to median value passed back by OUT_PARAM parm.Value = outMedian parm = cmd.Parameters.Add("@outReturnCode", DB2Type.Integer) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outErrorMsg", DB2Type.VarChar, 32) parm.Direction = ParameterDirection.Output ' Call the stored procedure Console.WriteLine() Console.WriteLine(" Call stored procedure named " & procName) Dim reader As DB2DataReader = cmd.ExecuteReader() ' Retrieve output parameters Dim outReturnCode As Int32 = CType(cmd.Parameters("@outReturnCode").Value, _ Int32) Dim outErrorMsg As String = CType(cmd.Parameters("@outErrorMsg").Value, _ String) If outReturnCode < 0 Console.Writeline( _ " Stored procedure failed with return code: " & outReturnCode) If outErrorMsg <> "" Console.Writeline( _ " Error message: " & outErrorMsg.Trim()) Else Console.Writeline( _ " No error message returned.") End If Else Console.WriteLine(" " & procName & " completed successfully") Console.WriteLine(" ==================================" & _ "=====================") ' Display the result set DisplayResultSet(reader) reader.Close() End If ' Rollback the transaction to restore SAMPLE ' database to original state trans.Rollback() Catch e As Exception trans.Rollback() Console.WriteLine(e) End Try End Sub ' CallOneResultSet ' This method obtains and displays a sub-section of a CLOB data type Public Shared Sub CallClobExtract(empNo As String, _ conn As DB2Connection, _ trans As DB2Transaction) Dim outInterests As String Try ' Create a DB2Command to execute the stored procedure CLOB_EXTRACT Dim procName As String = "CLOB_EXTRACT" Dim cmd As DB2Command = conn.CreateCommand() Dim parm As DB2Parameter cmd.Transaction = trans cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = procName ' Register input and output parameters for the DB2Command parm = cmd.Parameters.Add("@empno", DB2Type.Char, 6) parm.Direction = ParameterDirection.Input parm.Value = empNo parm = cmd.Parameters.Add("@interests", DB2Type.VarChar, 1000) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outReturnCode", DB2Type.Integer) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outErrorMsg", DB2Type.VarChar, 32) parm.Direction = ParameterDirection.Output ' Call the stored procedure Console.WriteLine() Console.WriteLine(" Call stored procedure named " & procName) cmd.ExecuteNonQuery() ' Retrieve output parameters outInterests = CType(cmd.Parameters("@interests").Value, String) Dim outReturnCode As Int32 = CType(cmd.Parameters("@outReturnCode").Value, _ Int32) Dim outErrorMsg As String = CType(cmd.Parameters("@outErrorMsg").Value, _ String) If outReturnCode < 0 Console.Writeline( _ " Stored procedure failed with return code: " & outReturnCode) If outErrorMsg <> "" Console.Writeline( _ " Error message: " & outErrorMsg.Trim()) Else Console.Writeline( _ " No error message returned.") End If Else Console.WriteLine(" " & procName & " completed successfully") Console.WriteLine(" Resume section returned for employee " _ & empNo & " =" & vbNewLine & _ vbNewLine & " " & outInterests) End If ' Rollback the transaction to restore SAMPLE ' database to original state trans.Rollback() Catch e As Exception trans.Rollback() Console.WriteLine(e) End Try End Sub ' CallClobExtract ' This method uses all the common data types in a stored procedure Public Shared Sub CallAllDataTypes(conn As DB2Connection, _ trans As DB2Transaction) Try ' Create a DB2Command to execute the CALL statement for ' ALL_DATA_TYPES Dim procName As String = "ALL_DATA_TYPES" Dim callsmt As String = "CALL " & _ procName & _ "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" Dim cmd As DB2Command = conn.CreateCommand() cmd.Transaction = trans cmd.CommandText = callsmt cmd.CommandType = CommandType.Text ' Register input-output and output parameters for the CALL statement ' and initialize input-output parameters Dim parm As DB2Parameter = cmd.Parameters.Add("@inoutSmallint", _ DB2Type.SmallInt) parm.Direction = ParameterDirection.InputOutput parm.Value = 32000 parm = cmd.Parameters.Add("@inoutInteger", DB2Type.Integer) parm.Direction = ParameterDirection.InputOutput parm.Value = 2147483000 parm = cmd.Parameters.Add("@inoutBigInt", DB2Type.BigInt) parm.Direction = ParameterDirection.InputOutput parm.Value = 2147483000 parm = cmd.Parameters.Add("@inoutReal", DB2Type.Real) parm.Direction = ParameterDirection.InputOutput parm.Value = 100000 parm = cmd.Parameters.Add("@inoutDouble", DB2Type.Double) parm.Direction = ParameterDirection.InputOutput parm.Value = 2500000 parm = cmd.Parameters.Add("@outChar", DB2Type.Char, 1) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outChars", DB2Type.Char, 15) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outVarchar", DB2Type.VarChar, 12) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outDate", DB2Type.Date) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outTime", DB2Type.Time) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outReturnCode", DB2Type.Integer) parm.Direction = ParameterDirection.Output parm = cmd.Parameters.Add("@outErrorMsg", DB2Type.VarChar,32) parm.Direction = ParameterDirection.Output ' Call the stored procedure Console.WriteLine() Console.WriteLine(" Call stored procedure named " & procName) Try cmd.ExecuteNonQuery() Catch Console.Writeline("Error when calling procedure") End Try ' Retrieve the return code output parameter and error message if any Dim outReturnCode As Int32 = CType(cmd.Parameters("@outReturnCode").Value, _ Int32) Dim outErrorMsg As String = CType(cmd.Parameters("@outErrorMsg").Value, _ String) If outReturnCode < 0 Console.Writeline( _ " Stored procedure failed with return code: " & outReturnCode) If outErrorMsg <> "" Console.Writeline( _ " Error message: " & outErrorMsg.Trim()) Else Console.Writeline( _ " No error message returned.") End If Else Console.WriteLine(" " & procName & " completed successfully") ' Retrieve and display output parameters Console.WriteLine(" Value of SMALLINT = " & _ cmd.Parameters("@inoutSmallint").Value) Console.WriteLine(" Value of INTEGER = " & _ cmd.Parameters("@inoutInteger").Value) Console.WriteLine(" Value of BIGINT = " & _ cmd.Parameters("@inoutBigint").Value) Console.WriteLine(" Value of REAL = " & _ cmd.Parameters("@inoutReal").Value) Console.WriteLine(" Value of DOUBLE = " & _ cmd.Parameters("@inoutDouble").Value) Console.WriteLine(" Value of CHAR(1) = " & _ cmd.Parameters("@outChar").Value) Console.WriteLine( _ " Value of CHAR(15) = " & _ cmd.Parameters("@outChars").Value.ToString().Trim()) Console.WriteLine( _ " Value of VARCHAR(12) = " & _ cmd.Parameters("@outVarchar").Value.ToString().Trim()) Console.WriteLine(" Value of DATE = " & _ cmd.Parameters("@outDate").Value) Console.Write(" Value of TIME = ") Console.Write(cmd.Parameters("@outTime").Value) Console.WriteLine() End If ' Rollback the transaction to restore SAMPLE ' database to original state trans.Rollback() Catch e As Exception trans.Rollback() Console.WriteLine(e) End Try End Sub ' CallAllDataTypes ' Helper method: This method displays the result set contained in the ' DB2DataReader Public Shared Sub DisplayResultSet (reader As DB2DataReader) Do While reader.Read() Console.Write(" ") Dim k As integer For k=0 To reader.FieldCount-1 Dim str As String If (Equals(reader.GetFieldType(k), _ Type.GetType("System.Decimal"))) Then str = FormatNumber(CType(reader.GetValue(k),Decimal),2) Else str = reader.GetValue(k).ToString() End If If (str.Length < 9) Then Console.Write(str.PadRight(9,Convert.ToChar(" ") ) & " ") Else Console.Write(str.Substring(0,9) & " ") End If Next k Console.WriteLine() Loop End Sub ' DisplayResultSet End Class ' SpClient