Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Yes, PowerShell can be used to access DB2 using The Microsoft Host Integration Server Data Providers.
Not a tutorial, but here is the script, ran using HIS 2004’s data provider:
$cn = new-object system.data.OleDb.OleDbConnection("Provider=DB2OLEDB;User ID=<userid>;Password=<password>;Initial Catalog=<catalog>;Network Transport Library=TCP;Host CCSID=37;PC Code Page=1252;Network Address=DB2V82;Network Port=50000;Package Collection=<collection>;Default Schema=<schema>;Process Binary as Character=False;Units of Work=RUW;DBMS Platform=DB2/NT;Defer Prepare=False;Persist Security Info=True;Connection Pooling=False;");
$ds = new-object "System.Data.DataSet" "dsTest"
$q = "SELECT ID_NUMBER"
$q = $q + " ,FIRST_NAME"
$q = $q + " ,LAST_NAME"
$q = $q + " ,CITY"
$q = $q + " ,STATE"
$q = $q + " FROM <schema>.ADELINS"
$da = new-object "System.Data.OleDb.OleDbDataAdapter" ($q, $cn)
$da.Fill($ds)
$dtPerson = new-object "System.Data.DataTable" "dtPersonData"
$dtPerson = $ds.Tables[0]
$dtPerson | FOREACH-OBJECT { " " + $_.ID_NUMBER + ": " + $_.FIRST_NAME + ", " + $_.LAST_NAME + ", " + $_.CITY + ", " + $_.STATE }
Output (the values are dummy ones in the table and don’t match the column names, but everything is correct):
PS C:\scripts> c:\scripts\db2query.ps1
15
1 : 1, 2, 3, 4
1 : 2, 3, 4, 5
1 : 3, 4, 5, 6
1 : 4, 5, 6, 7
1 : 5, 6, 7, 8
x : 6, 7, 8, 9
x : 7, 8, 9, 10
x : 8, 9, 10, 11
x : 9, 10, 11, 12
x : 10, 11, 12, 13
1 : 6, 7, 8, 9
1 : 7, 8, 9, 10
1 : 8, 9, 10, 11
1 : 9, 10, 11, 12
1 : 10, 11, 12, 13
A more useful script is this one, that pings an AS400 (in this case), then tries to open a socket to the DDM port (446) to see if it’s listening:
$ip ="172.29.136.200"
$ping = new-object System.Net.NetworkInformation.Ping
$rslt = $ping.send($ip)
if ($rslt.status.tostring() -eq "Success")
{
write-host "ping worked"
# if the ping works, try opening a socket to the DDM port
$port = 446
$socket = new-object System.Net.Sockets.TcpClient($ip, $port)
if ($socket -eq $null)
{
write-host "could not open DDM socket"
}
else
{
write-host "got socket to DDM"
$socket = $null
}
}
else
{
write-host "ping failed"
}
$ping = $null
Output:
C:\scripts>powershell c:\scripts\portping.ps1
ping worked
got socket to DDM
Comments
- Anonymous
October 30, 2008
PingBack from http://mstechnews.info/2008/10/using-powershell-to-access-db2/