'****************************************************************************
' (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: TbSel.vb
'
' SAMPLE: How to select from each of: insert, update, delete.
'
' SQL Statements USED:
'         INCLUDE
'         CREATE TABLE
'         INSERT 
'         SELECT FROM INSERT
'         SELECT FROM UPDATE
'         SELECT FROM DELETE
'         PREPARE
'         DROP TABLE
'
' DB2 .NET Data Provider Classes USED:
'         DB2Connection
'         DB2Command
'         DB2Transaction
'
'                           
'****************************************************************************
'
' Building and Running the sample program 
'
' 1. Compile the TbSel.vb file with bldapp.bat by entering the following 
'    at the command prompt:
'
'      bldapp TbSel
'
'    or compile TbSel.vb with the makefile by entering the following at 
'    the command prompt:
'
'      nmake TbSel
'
' 2. Run the TbSel program by entering the program name at the command 
'    prompt:
'
'      TbSel
'
'****************************************************************************
'
' 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 TbSel
  Public Shared Sub Main(args() As String)
    Dim conn As DB2Connection
    Dim trans As DB2Transaction
    Try
      Console.WriteLine()
      Console.WriteLine( _
        "THIS EXAMPLE SHOWS HOW TO SELECT FROM EACH OF: " & _
        "INSERT, UPDATE, DELETE.")

      ' Connect to database.
      conn = ConnectDb(args)

      trans = conn.BeginTransaction()
      Create(conn,trans)
      
      trans = conn.BeginTransaction()
      Print(conn,trans)

      trans = conn.BeginTransaction() 
      Buy_Company(conn, trans)

      trans = conn.BeginTransaction()
      Print(conn,trans)

      trans = conn.BeginTransaction() 
      Drop(conn,trans)

      ' Disconnect from 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

  ' The ConnectDB function establishes a database connection.
  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()
    Return conn
  End Function ' ConnectDb

  ' The Create function creates and populates tables used by this sample.
  Public Shared Sub Create(conn As DB2Connection, trans As DB2Transaction)
    Try

      ' The context for this sample is that of a Company B taking over 
      ' a Company A.  This sample illustrates how company B incorporates 
      ' data from table company_b into table company_a.
      
	    Console.WriteLine(vbNewLine & _
        "CREATE TABLE company_a " & _
        vbNewLine & _
	      " (ID SMALLINT NOT NULL UNIQUE, " & _
        vbNewLine & _
	      " NAME VARCHAR(9), " & _
        vbNewLine & _
	      " DEPARTMENT SMALLINT, " & _
        vbNewLine & _
   	    " JOB CHAR(5), " & _
        vbNewLine & _
	      " YEARS SMALLINT, " & _
        vbNewLine & _
	      " SALARY DECIMAL(7,2))") 
      Console.WriteLine()
      
      ' Company A is being bought out.
      Dim cmd As DB2Command = conn.CreateCommand()
      cmd.Transaction = trans
      cmd.CommandText = _
        "CREATE TABLE company_a " & _ 
        "  (ID SMALLINT NOT NULL UNIQUE, " & _
        "   NAME VARCHAR(9), " & _
        "  DEPARTMENT SMALLINT, " & _
		    "  JOB CHAR(5), " & _
        "  YEARS SMALLINT," & _
        "  SALARY DECIMAL(7,2))"
      cmd.ExecuteNonQuery()

	    Console.WriteLine("CREATE TABLE company_b " & _
        vbNewLine & _
	      " (ID SMALLINT GENERATED BY DEFAULT AS IDENTITY (START WITH 2000, " & _
        "INCREMENT BY 1) NOT NULL, " & _
        vbNewLine & _
	      " NAME VARCHAR(9), " & _
        vbNewLine & _
	      " DEPARTMENT SMALLINT, " & _
        vbNewLine & _
	      " JOB CHAR(5), " & _
        vbNewLine & _
	      " YEARS SMALLINT, " & _
        vbNewLine & _
	      " SALARY DECIMAL(7,2), " & _
        vbNewLine & _
	      " BENEFITS VARCHAR(50), " & _
        vbNewLine & _
  	    " OLD_ID SMALLINT)")
	    Console.WriteLine()
  
      ' Company B is buying out Company A.  This table has a few additional columns 
      ' and differences from the previous table.  Specifically, the ID column is
      ' generated.
      cmd.CommandText = _
        "CREATE TABLE company_b " & _
        " (ID SMALLINT GENERATED BY DEFAULT AS IDENTITY (START WITH 2000, " & _
        "INCREMENT BY 1) NOT NULL, " & _ 
        " NAME VARCHAR(9), " & _ 
		    " DEPARTMENT SMALLINT, " & _ 
		    " JOB CHAR(5), " & _ 
		    " YEARS SMALLINT, " & _ 
		    " SALARY DECIMAL(7,2), " & _ 
		    " BENEFITS VARCHAR(50), " & _
	      " OLD_ID SMALLINT)"
	    cmd.ExecuteNonQuery()    

      Console.WriteLine("CREATE TABLE salary_change " & _
        vbNewLine & _
	      " (ID SMALLINT NOT NULL UNIQUE, " & _
        vbNewLine & _
	      " OLD_SALARY DECIMAL(7,2), " & _
        vbNewLine & _
	      " SALARY DECIMAL(7,2))")
	    Console.WriteLine()
	  
      ' This table can be used by the management of Company B to see how 
      ' much of a raise they gave to employees from Company A for joining
      ' Company B (in a dollar amount, as opposed to a 5% increase).
      cmd.CommandText = _
		    "CREATE TABLE salary_change " & _
		    " (ID SMALLINT NOT NULL UNIQUE, " & _
	  	  " OLD_SALARY DECIMAL(7,2), " & _
  	    " SALARY DECIMAL(7,2)) "
	    cmd.ExecuteNonQuery()

	    Console.WriteLine("INSERT INTO company_a VALUES(5275, 'Sanders', " & _
        "20, 'Mgr', 15, 18357.50), " & _
        vbNewLine & _
	      " (5265, 'Pernal', 20, 'Sales', 1, 18171.25), " & _
        vbNewLine & _
		    " (5791, 'O''Brien', 38, 'Sales', 10, 18006.00)")
      Console.WriteLine()

      ' Populate table company_a with data.
      cmd.CommandText = _ 
        "INSERT INTO company_a VALUES(5275, 'Sanders', 20, 'Mgr', 15, " & _
        "18357.50), " & _ 
        " (5265, 'Pernal', 20, 'Sales', NULL, 18171.25), " & _ 
        " (5791, 'O''Brien', 38, 'Sales', 9, 18006.00)"
      cmd.ExecuteNonQuery()

	    Console.WriteLine("INSERT INTO company_b VALUES(default, " & _
        "'Naughton', 38, 'Clerk', 0, 12954.75, 'No Benefits', 0), " & _
        vbNewLine & _
        " (default, 'Yamaguchi', 42, 'Clerk', 6, 10505.90, " & _
        "'Basic Health Coverage', 0), " & _
        vbNewLine & _
        " (default, 'Fraye', 51, 'Mgr', 6, 21150.00, " & _
        "'Basic Health Coverage', 0), " & _
        vbNewLine & _
        " (default, 'Williams', 51, 'Sales', 6, 19456.50, " & _
        "'Basic Health Coverage', 0), " & _
        vbNewLine & _
        " (default, 'Molinare', 10, 'Mgr', 7, 22959.20, " & _
        "'Basic Health Coverage', 0)")

	    ' Populate table company_b with data.
	    cmd.CommandText = _
	      "INSERT INTO company_b VALUES(default, 'Naughton', 38, " & _
        "'Clerk', NULL, 12954.75, 'No Benefits', NULL), " & _
		    " (default, 'Yamaguchi', 42, 'Clerk', 5, 10505.90, " & _
        "'Basic Health Coverage', NULL), " & _
		    " (default, 'Fraye', 51, 'Mgr', 8, 21150.00, " & _
        "'Basic Health Coverage', NULL), " & _
		    " (default, 'Williams', 51, 'Sales', 10, 19456.50, " & _
        "'Advanced Health Coverage', NULL), " & _
		    " (default, 'Molinare', 10, 'Mgr', 15, 22959.20, " & _
        "'Advanced Health Coverage and Pension Plan', NULL)"
	    cmd.ExecuteNonQuery()

      ' Commit
      trans.Commit()
    Catch e As Exception
      Console.WriteLine(e.Message)  
    End Try
  End Sub ' Create

  ' The Buy_Company function encapsulates the table updates after Company B 
  ' takes over Company A.  Each employees from table company_a is allocated
  ' a benefits package.  The employee data is moved into table company_b.  
  ' Each employee's salary is increased by 5%.  The old and new salaries are 
  ' recorded in a table salary_change.
  Public Shared Sub Buy_Company(conn As DB2Connection, trans As DB2Transaction)
    Dim conn2 As DB2Connection
    Dim trans2 As DB2Transaction
    Dim reader as DB2DataReader
    Dim reader2 as DB2DataReader
    Try
      conn2 = ConnectDb(New String() {})
      trans2 = conn2.BeginTransaction()
      Dim cmd as DB2Command
      Dim cmd2 as DB2Command

      Dim id as integer             ' Employee's ID
      Dim department as integer     ' Employee's department
	    Dim years as integer          ' Number of years employee has worked 
                                    ' with the company
      Dim new_id as integer = 0     ' Employee's new ID when they switch 
                                    ' companies

	    Dim name as string            ' Employee's name
      Dim job as string             ' Employee's job title
      Dim benefits as string        ' Employee's benefits
	  
	    Dim salary as decimal         ' Employees current salary
      Dim old_salary as decimal     ' Employees old salary

      ' The following SELECT statement references a DELETE statement in its 
      ' FROM clause.  It deletes all rows from company_a, selecting all 
      ' deleted rows into the DB2DataReader reader.
	    cmd   = conn.CreateCommand()
	    cmd.CommandText = "SELECT ID, NAME, DEPARTMENT, JOB, YEARS, SALARY " & _
                        "FROM OLD TABLE (DELETE FROM company_a)"
      cmd.Transaction = trans
	    reader = cmd.ExecuteReader()

      ' The following while loop iterates through each employee of table
      ' company_a. 
      while (reader.Read())
	   	  id = reader.GetInt16(0)
		    name = reader.GetString(1)
    	  department = reader.GetInt16(2)
		    job = reader.GetString(3)
		    if(reader.IsDBNull(4))
          years = 0
		    else
		      years = reader.GetInt16(4)
         end if
		    salary = reader.GetDecimal(5)
       
		    ' The following if statement sets the new employee's benefits based
        ' on their years of experience.
        if(years > 14)
		      benefits = "Advanced Health Coverage and Pension Plan"
        else if(years > 9)
		      benefits = "Advanced Health Coverage"
		    else if(years > 4)
		      benefits = "Basic Health Coverage"
		    else
		      benefits = "No Benefits"
        end if

	      ' The following SELECT statement references an INSERT statement in 
        ' its FROM clause.  It inserts an employee record from host 
        ' variables into table company_b.  The current employee ID from the 
        ' cursor is selected into new_id via the DB2DataReader reader2.  The
        ' keywords FROM FINAL TABLE determine that the value in new_id is 
        ' the value of ID after the INSERT statement is complete.

        ' Note that the ID column in table company_b is generated and 
        ' without the SELECT statement an additional query would have 
        ' to be made in order to retreive the employee's ID number.
        cmd2 = conn2.CreateCommand()
		    cmd2.CommandText = "SELECT ID FROM FINAL TABLE (INSERT INTO " & _
          "company_b VALUES(default, ?, ?, ?, ?, ?, ?, ?))"
		        
        cmd2.Parameters.Add("@name", DB2Type.VarChar, 9)
		    cmd2.Parameters.Add("@department", DB2Type.SmallInt, 6)
		    cmd2.Parameters.Add("@job", DB2Type.Char, 5)
		    cmd2.Parameters.Add("@years", DB2Type.SmallInt, 6)
		    cmd2.Parameters.Add("@salary", DB2Type.Decimal, 7)
		    cmd2.Parameters.Add("@benefits", DB2Type.VarChar, 50)
		    cmd2.Parameters.Add("@id", DB2Type.SmallInt, 6)

        cmd2.Parameters("@name").Value = name
		    cmd2.Parameters("@department").Value = department
		    cmd2.Parameters("@job").Value = job
		    cmd2.Parameters("@years").Value = years
		    cmd2.Parameters("@salary").Value = salary
		    cmd2.Parameters("@benefits").Value = benefits
		    cmd2.Parameters("@id").Value = id

        cmd2.Transaction = trans2
		    reader2 = cmd2.ExecuteReader()
	  
		    reader2.Read()
	      new_id = reader2.GetInt16(0)
        reader2.Close()

		    ' The following SELECT statement references an UPDATE statement in
        ' its FROM clause.  It updates an employee's salary by giving them 
        ' a 5% raise.  The employee's id, old salary and current salary are 
        ' all read into reader2 for later use in this function.
       
        ' The INCLUDE statement works by creating a temporary column to keep
        ' track of the old salary.  This temporary column is only available 
        ' for this statement and is gone once the statement completes.  The 
        ' only way to keep this data after the statement completes is to 
        ' read it into a reader object.
		    cmd2 = conn2.CreateCommand()
		    cmd2.CommandText = "SELECT ID, OLD_SALARY, SALARY " & _
		      "                 FROM FINAL TABLE (UPDATE company_b INCLUDE " & _
          "                                  (OLD_SALARY DECIMAL(7,2)) " & _
		      "                                   SET OLD_SALARY = SALARY, " & _
		      "                                       SALARY = SALARY * 1.05 " & _
		      "                                   WHERE ID = ?)"
		  
		    cmd2.Parameters.Add("@new_id", DB2Type.SmallInt, 6)
		    cmd2.Parameters("@new_id").Value = new_id
		    cmd2.Transaction = trans2
		
		    reader2 = cmd2.ExecuteReader()
	  	  reader2.Read()
		  
		    id = reader2.GetInt16(0)
		    old_salary = reader2.GetDecimal(1)
		    salary = reader2.GetDecimal(2)
        reader2.Close()
		
        ' This INSERT statement inserts an employee's id, old salary and 
        ' current salary into the salary_change table.
	      cmd2 = conn2.CreateCommand()
		    cmd2.CommandText = " INSERT INTO salary_change VALUES(?, ?, ?)"
		    cmd2.Parameters.Add("@id", DB2Type.SmallInt, 6)
		    cmd2.Parameters.Add("@old_salary", DB2Type.Decimal, 6)
		    cmd2.Parameters.Add("@new_salary", DB2Type.Decimal, 6)
		
  		  cmd2.Parameters("@id").Value = new_id
	  	  cmd2.Parameters("@old_salary").Value = old_salary
		    cmd2.Parameters("@new_salary").Value = salary
		    cmd2.Transaction = trans2
	      cmd2.ExecuteNonQuery()
	    end while
	    reader.Close()

      ' The following DELETE statement references a SELECT statement in 
      ' its FROM clause.  It lays off the highest paid manager.  This 
      ' DELETE statement removes the manager from the table company_b.
      cmd2 = conn2.CreateCommand()
	    cmd2.CommandText = "DELETE FROM (SELECT * FROM company_b ORDER BY " & _
        "                              SALARY DESC FETCH FIRST ROW ONLY)"
	    cmd2.Transaction = trans2
	    cmd2.ExecuteNonQuery()
	  
      ' The following UPDATE statement references a SELECT statement in its 
      ' FROM clause.  It gives the most senior employee a $10000 bonus.  
      ' This UPDATE statement raises the employee's salary in the table 
      ' company_b.  
      cmd2 = conn2.CreateCommand()
      cmd2.CommandText = "UPDATE (SELECT MAX(YEARS) OVER() AS max_years, " & _
                         "YEARS, " & _
                         "SALARY " & _
                         "FROM company_b) " & _
                         "SET SALARY = SALARY + 10000 " & _
                         "WHERE max_years = YEARS "
	    cmd2.Transaction = trans2
	    cmd2.ExecuteNonQuery()

      ' Commit
      trans.Commit()
      trans2.Commit()
	  
      ' Disconnect from the database
      conn2.Close()
    Catch e As Exception
      Console.WriteLine(e.Message)
      conn2.Close()
    End Try
  End Sub ' Buy_Company

  ' The Print function outputs the data in the tables: company_a, company_b 
  ' and salary_change.  For each table, a while loop and reader object are 
  ' used to fetch and display row data.
  Public Shared Sub Print(conn As DB2Connection, trans As DB2Transaction)
	  Dim reader as DB2DataReader
    Dim cmd as DB2Command
	  Try
		  Dim id as integer				    ' Employee's ID
		  Dim department as integer		' Employee's department
		  Dim years as integer 			  ' Number of years employee has worked with
                                  ' the company
		  Dim new_id as integer			  ' Employee's new ID when they switch 
                                  ' companies
	
		  Dim name as string			    ' Employee's name
		  Dim job as string		    	  ' Employee's job title
		  Dim benefits as string		  ' Employee's benefits
	  
		  Dim salary as decimal     	' Employee's current salary
		  Dim old_salary as decimal 	' Employee's old salary

		  cmd = conn.CreateCommand()
		  cmd.CommandText = "SELECT ID, NAME, DEPARTMENT, JOB, YEARS, SALARY " & _
       "FROM company_a"
		  cmd.Transaction = trans
		  reader = cmd.ExecuteReader()

      Console.WriteLine()
		  Console.WriteLine("SELECT * FROM company_a")
      Console.WriteLine()
		  Console.WriteLine("ID     NAME      DEPARTMENT JOB   YEARS  SALARY")
		  Console.WriteLine("------ --------- ---------- ----- ------ ----------")
		  while (reader.Read())
			  id = reader.GetInt16(0)
			  name = reader.GetString(1)
			  department = reader.GetInt16(2)
			  job = reader.GetString(3)
			  if(reader.IsDBNull(4))
				  years = 0
			  else
				  years = reader.GetInt16(4)
        end if
			  salary = reader.GetDecimal(5)
			  Console.WriteLine("{0,6} {1,9} {2,10} {3,5} {4,6} {5,9:C}", id, name, department, job, years, salary)
		  end while
		  reader.Close()
		  Console.WriteLine()

		  cmd.CommandText = "SELECT ID, NAME, DEPARTMENT, JOB, YEARS, SALARY, " & _
        "BENEFITS, OLD_ID FROM company_b"
		  cmd.Transaction = trans
		  reader = cmd.ExecuteReader()

		  Console.WriteLine("SELECT * FROM company_b")
      Console.WriteLine()
		  Console.WriteLine("ID     NAME      DEPARTMENT JOB   YEARS  SALARY    ")
      Console.WriteLine("BENEFITS                                           OLD_ID")
		  Console.WriteLine("------ --------- ---------- ----- ------ ---------- ")
      Console.WriteLine(" -------------------------------------------------- ------")
		  while (reader.Read())
			  id = reader.GetInt16(0)
			  name = reader.GetString(1)
			  department = reader.GetInt16(2)
			  job = reader.GetString(3)
			  if(reader.IsDBNull(4))
				  years = 0
			  else
				  years = reader.GetInt16(4)
        end if
			  salary = reader.GetDecimal(5)
			  benefits = reader.GetString(6)
			  if(reader.IsDBNull(7))
				  new_id = 0
			  else
				  new_id = reader.GetInt16(7)
        end if
			  Console.WriteLine("{0,6} {1,9} {2,10} {3,5} {4,6} {5,9:C}", id, name, department, job, years, salary)
			  Console.WriteLine("{0,51} {1,6}", benefits, new_id)
        Console.WriteLine()
		  end while
		  reader.Close()
		  
		  cmd.CommandText = "SELECT ID, OLD_SALARY, SALARY FROM salary_change"
		  cmd.Transaction = trans
		  reader = cmd.ExecuteReader()

		  Console.WriteLine("SELECT * FROM salary_change")
      Console.WriteLine()
		  Console.WriteLine("ID     OLD_SALARY SALARY")
		  Console.WriteLine("------ ---------- ----------")
		  while (reader.Read())
			  id = reader.GetInt16(0)
			  old_salary = reader.GetDecimal(1)
		    salary = reader.GetDecimal(2)
			  Console.WriteLine("{0,6} {1,10:C} {2,9:C}", id, old_salary, salary)
		  end while
		  reader.Close()
      
      ' Commit
      trans.Commit()
		Catch e as Exception
		  Console.WriteLine(e.Message)
	  End Try
  End Sub ' Print

  ' The Drop function drops the tables used by this sample.
  Public Shared Sub Drop(conn As DB2Connection, trans As DB2Transaction)
    Try
      Console.WriteLine()
      Console.WriteLine("DROP TABLE company_a " & _
                        vbNewLine)
      Dim cmd As DB2Command = conn.CreateCommand()
      cmd.CommandText = _
		    "DROP TABLE company_a "
      cmd.Transaction = trans
	    cmd.ExecuteNonQuery()
    
      Console.WriteLine("DROP TABLE company_b" & _
                        vbNewLine)
      cmd = conn.CreateCommand()
	    cmd.CommandText = _
	      "DROP TABLE company_b"
      cmd.Transaction = trans
	    cmd.ExecuteNonQuery()
    
      Console.WriteLine("DROP TABLE salary_change")
      cmd = conn.CreateCommand()
	    cmd.CommandText = _
	      "DROP TABLE salary_change"
      cmd.Transaction = trans
	    cmd.ExecuteNonQuery()
      
      ' Commit
      trans.Commit()
    Catch e As Exception
      Console.WriteLine(e.Message)
    End Try
  End Sub ' Drop
End Class ' TbSel