'**************************************************************************** ' (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: TbInfo.vb ' ' SAMPLE: How to get information about a table ' with the DB2 .Net Data Provider ' ' SQL Statements USED: ' SELECT ' ' DB2 .NET Data Provider Classes USED: ' DB2Connection ' DB2Command ' ' '**************************************************************************** ' ' Building and Running the sample program ' ' 1. Compile the TbInfo.vb file with bldapp.bat by entering the following ' at the command prompt: ' ' bldapp TbInfo ' ' or compile TbInfo.vb with the makefile by entering the following at ' the command prompt: ' ' nmake TbInfo ' ' 2. Run the TbInfo program by entering the program name at the command ' prompt: ' ' TbInfo ' '**************************************************************************** ' ' 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 TbInfo Public Shared Sub Main(args() As String) ' Declare a DB2Connection Dim conn As DB2Connection Try Console.WriteLine() Console.WriteLine( _ " THIS SAMPLE SHOWS HOW TO GET INFORMATION ABOUT A TABLE.") ' Declare a String to store the table name Dim tableName As String Console.WriteLine() ' Connect to a database Console.WriteLine(" Connecting to a database ...") conn = ConnectDb(args) tableName = "STAFF" ' Obtain the schema name for a table GetSchemaName(conn, tableName) ' Obtain the column information for a table GetColumnInfo(conn, tableName) ' Disconnect from the database Console.WriteLine(vbNewLine & _ " Disconnect from the database.") conn.Close() Catch e As Exception Console.WriteLine(e.Message) If Not (conn is System.DBNull.value) Then conn.Close() End If 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 demonstrates how to get the schema name for a table Public Shared Sub GetSchemaName(conn As DB2Connection, tableName As String) Console.WriteLine() Console.WriteLine( _ " ----------------------------------------------------------" & _ vbNewLine & _ " USE THE SQL STATEMENT:" & vbNewLine & _ " SELECT" & vbNewLine & _ " TO GET THE SCHEMA NAME OF A TABLE.") Try ' Get the schema name for a table and display it Console.WriteLine() Console.WriteLine( _ " Execute the statement:" & vbNewLine & _ " SELECT tabschema" & vbNewLine & _ " FROM syscat.tables" & vbNewLine & _ " WHERE tabname = '" & tableName & "'") Dim cmd As DB2Command = conn.CreateCommand() cmd.CommandText = "SELECT tabschema " & _ " FROM syscat.tables " & _ " WHERE tabname = '" & tableName & "'" Dim reader As DB2DataReader = cmd.ExecuteReader() reader.Read() Console.WriteLine() Console.WriteLine(" Table schema name is: " & reader.GetString(0)) reader.Close() Catch e As Exception Console.WriteLine(e.Message) End Try End Sub ' GetSchemaName ' This method demonstrates how to get the column information for a table Public Shared Sub GetColumnInfo(conn As DB2Connection, tableName As String) Dim dataColname As String = "" Dim dataTypename As String= "" Dim dataLength As Int32 = 0 Dim dataScale As Int32 = 0 Console.WriteLine() Console.WriteLine( _ " ----------------------------------------------------------" & _ vbNewLine & _ " USE THE SQL STATEMENTS:" & vbNewLine & _ " SELECT" & vbNewLine & _ " TO GET THE COLUMN INFORMATION OF A TABLE.") Try ' Get the column information for a table Console.WriteLine() Console.WriteLine( _ " The following SQL statement gets the column information " & _ vbNewLine & _ " of the '" & tableName & "' table: " & vbNewLine) Console.WriteLine( _ " SELECT colname, typename, length, scale " & vbNewLine & _ " FROM syscat.columns " & vbNewLine & _ " WHERE tabname = '" & tableName & "'" & vbNewLine) Console.WriteLine( _ " column name data type data size" & vbNewLine & _ " -------------------- -------------- ----------") ' Create a DB2Command to execute the SQL statement Dim cmd As DB2Command = conn.CreateCommand() cmd.CommandText = "SELECT colname, typename, length, scale " & _ " FROM syscat.columns " & _ " WHERE tabname = '" & tableName & "'" & vbNewLine Dim reader As DB2DataReader = cmd.ExecuteReader() ' Check if the query returned no data If (Equals(reader.Read(), false)) Then Console.WriteLine() Console.WriteLine(" Data not found." & vbNewLine) End If ' Retrieve and display the column information from the DB2DataReader Do While reader.Read() dataColname = reader.GetString(0) dataTypename = reader.GetString(1) dataLength = reader.GetInt32(2) dataScale = reader.GetInt16(3) Console.Write(" " & dataColname.PadRight(20) & _ " " & dataTypename.PadRight(14) & _ " " & dataLength) If (NOT Equals(dataScale,0)) Then Console.WriteLine("," & dataScale) Else Console.WriteLine() End If Loop reader.Close() Catch e As Exception Console.WriteLine(e.Message) End Try End Sub ' GetColumnInfo End Class ' TbInfo