Walden, what API are you referring to
http://publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp?topic=
/rzaik/rzaikrccommapis.htm ? Isn't there a Kerberos service on the
iSeries? Couldn't we use the Windows token to authenticate against the
iSeries?
Lee, here is some sample .Net code (also, remember that any
communication between IIS ASP.NET code and the iSeries will be run as
Network Service user by default and not the user you login with to your
ASP.NET application):
Imports IBM.Data.DB2.iSeries
Imports System.Data
Public Class DB2ADO
Private _cn_connString As String = ""
Private _cn As iDB2Connection
Private _cn_iSeriesFQDN As String = "myIseries.domain.com"
Private _cn_initialCatalog As String = "*SYSBAS" ' "s10913ce"
Private _cn_connTimeout As String = "20"
Private _cn_user As String = ""
Private _cn_pass As String = ""
Private _cn_SSL As String = "FALSE"
Private _cn_Naming As String = "SQL" ' "System"
Private _cn_LibraryList = "*USRLIBL"
Private _cn_DataCompression = "TRUE"
Private _cn_HexParser = "Character" ' Not needed
Private _ConvertByte As Boolean = False
'Private _cn_defaultCollection As String = "AMFLIB"
' Trace Facility
Private _trace_bin As String = "C:\program files\ibm\Client
Access\cwbmptrc.exe"
Private _trace_out As String = "C:\program files\ibm\Client
Access\idb2trace.txt"
Public Sub New(ByVal iSeriesFQDN As String, ByVal user As String,
ByVal pass As String, Optional ByVal ConvertByte As Boolean = True)
_cn_iSeriesFQDN = iSeriesFQDN
_cn_user = user
_cn_pass = pass
_ConvertByte = ConvertByte
_cn_connString = "DataSource=" & _cn_iSeriesFQDN & _
";ConnectionTimeout=" & _cn_connTimeout & _
";Database=" & _cn_initialCatalog & _
";HexParserOption=" & _cn_HexParser & _
";UserID=" & _cn_user & _
";Password=" & _cn_pass & _
";SSL=" & _cn_SSL & _
";DataCompression=" & _cn_DataCompression & _
";Naming=" & _cn_Naming & _
";LibraryList=" & _cn_LibraryList
_cn_pass = ""
End Sub
Public Function Connect() As Boolean
_cn = New iDB2Connection
_cn.ConnectionString = _cn_connString
Dim failFlag As Boolean = True
Try
_cn.Open()
Console.WriteLine("Server Version: " & _cn.ServerVersion)
Console.WriteLine("Default Collection: " &
_cn.DefaultCollection)
Console.WriteLine("Job: " & _cn.JobName)
Catch ex As Exception
failFlag = False
End Try
Return failFlag
End Function
Public Sub Disconnect()
_cn.Close()
End Sub
Public Function Query(ByVal SelectCommand As String) As DataTable
If _cn.State = ConnectionState.Open Then
If _ConvertByte Then
iDB2ProviderSettings.CharBitDataAsString = True ' TODO:
thank you
iDB2ProviderSettings.CharBitDataCcsid = 37
Else
iDB2ProviderSettings.CharBitDataAsString = False
End If
Dim cmd As New iDB2Command(SelectCommand, _cn)
Dim da As New iDB2DataAdapter(cmd)
Dim ds As New DataSet
Try
da.Fill(ds, "table0")
If ds.Tables("table0").Rows.Count = 0 Then
Return New DataTable
ElseIf ds.Tables("table0").Rows.Count > 0 Then
Return ds.Tables("table0")
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
Return New DataTable
End Try
Else
Return New DataTable
End If
End Function
'----------- storec proc testing
Public Function SP_Test1() As String
If _cn.State = ConnectionState.Open Then
Dim cmd As New iDB2Command("Test1",
CommandType.StoredProcedure, _cn)
cmd.Parameters.Add("@CustomerNumber",
iDB2DbType.iDB2Integer)
cmd.Parameters.Add("@TotalActivity", iDB2DbType.iDB2Decimal)
cmd.Parameters(0).Value = 55900
cmd.Parameters(1).Direction = ParameterDirection.Output
cmd.ExecuteNonQuery()
Return (" Para0 = " & cmd.Parameters(0).Value.ToString &
vbNewLine & " Para1 = " & cmd.Parameters(1).Value.ToString)
Else
Return "Connection Dead"
End If
End Function
Public Sub SP_Create()
If _cn.State = ConnectionState.Open Then
Dim cmd As iDB2Command
cmd = _cn.CreateCommand
cmd.CommandText = "create procedure amflib.Test2 (" & _
"in customernumber integer) result sets 1 language sql " & _
"begin " & _
" declare c1 cursor for select jqglva,extca,coqty,tdate
from " & _
" amflib.mthacte where cusno=customernumber; " & _
" open c1; " & _
" set result sets cursor c1; " & _
"end"
cmd.ExecuteNonQuery()
Else
End If
End Sub
Public Function SP_Test2(ByVal CustomerNumber As Integer) As
DataTable
If _cn.State = ConnectionState.Open Then
Dim cmd As New iDB2Command("Test2",
CommandType.StoredProcedure, _cn)
cmd.Parameters.Add("@CustomerNumber",
iDB2DbType.iDB2Integer)
cmd.Parameters(0).Value = CustomerNumber
Dim da As New iDB2DataAdapter(cmd)
Dim ds As New DataSet
da.Fill(ds, "table0")
Return ds.Tables("table0")
Else
Return New DataTable
End If
End Function
End Class
-----Original Message-----
From: systemidotnet-bounces@xxxxxxxxxxxx
[mailto:systemidotnet-bounces@xxxxxxxxxxxx] On Behalf Of Walden H.
Leverich
Sent: Monday, September 14, 2009 8:11 AM
To: .net use with the System i
Subject: Re: [SystemiDotNet] IIS server not sending user id
The login credentials you obtained from a form the user filled out? Just
use their username/password as part of the connection string.
Alternatively, since you can get the username from windows (just not the
password) you could use the get/set profile handle APIs on i to set the
"current" user to be the client's user name. This would enforce all the
correct data access, however, you'd have to do that at the start of each
connection.
-Walden
As an Amazon Associate we earn from qualifying purchases.