¿Posible consultar AS400 DB2 a través de vb.net sin un PRG?
-
21-12-2019 - |
Pregunta
Después de pasar unos días investigando y tratando de resolver este solo, realmente podría usar algo de ayuda.
Estoy tratando de consultar la base de datos de AS400 directamente desde .NET sin el uso de un archivo de programa AS400.Tengo muy poco apoyo que no sea "Adelante e intente" de los administradores de AS400 (me dicen lo que estoy intentando no se ha hecho aquí antes).
Me gustaría mucho usar CWBX.El código a continuación se conecta con éxito, pero realmente podría usar un puntero en la dirección correcta sobre cómo construir una consulta:
Dim As400 As New AS400System
Dim AsProgram As New cwbx.Program
Dim AsCommand As New cwbx.Command
Dim strQuery As String
As400.Define("AS400")
As400.UserID = ""
As400.Password = ""
As400.IPAddress = ""
As400.Connect(cwbcoServiceEnum.cwbcoServiceRemoteCmd)
If As400.IsConnected(cwbcoServiceEnum.cwbcoServiceRemoteCmd) = 1 Then
MsgBox("Valid Connection")
Else
MsgBox("Invalid Connection")
Exit Sub
End If
'-----------------------------------------------------------------------------------------
'Trying to figure out first if this syntax is correct, and if so... where/how to call it??
'-----------------------------------------------------------------------------------------
strQuery = "SELECT * FROM Library.File WHERE FILEFIELD='Criteria'"
' ---
AsProgram.LibraryName = ""
AsProgram.ProgramName = "" '?
AsProgram.system = As400
'Assuming this will end up being a program call?
'AsProgram.Call()
As400.Disconnect(cwbcoServiceEnum.cwbcoServiceRemoteCmd)
Estoy muy abierto a cualquier otro método / sugerencias.He buscado guías del sitio de IBM, así como a MSDN y, en realidad, no realizan consultas directas sin el uso de un archivo de programa AS400.¿Esto es incluso posible?
Solución
Aquí hay una aplicación de consola simple que recuperará todos los registros de una tabla y mostrará el recuento de filas.
Imports System.Data.OleDb
Module Module1
Sub Main()
Dim cmd As New OleDbCommand
Dim table As String = "YOUR TABLE"
cmd.CommandText = "SELECT * FROM " & table
Dim ip As String = "YOUR AS/400 IP GOES HERE"
Dim user As String = "YOUR USER ID"
Dim pass As String = "YOUR PASSWORD"
Dim defaultLib As String = "YOUR LIBRARY"
Dim connstring As String = "Provider=IBMDA400;" & _
"Data Source=" & ip & ";" & _
"Force Translate=0;" & _
"Default Collection=" & defaultLib & ";" & _
"User ID=" & user & ";" & _
"Password=" & pass
cmd.Connection = New OleDbConnection(connstring)
cmd.Connection.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader
Dim dt As New DataTable
dt.Load(dr)
Console.WriteLine(dt.Rows.Count)
Console.WriteLine("Press ENTER to close...")
Console.ReadLine()
End Sub
End Module
Otros consejos
El servicio REMOTECMD es básicamente un demonio REXCD. No estoy seguro de por qué estás jugando con eso cuando quieres una consulta simple una tabla DB. El DB integrado en IBM I es accesible a través de ODBC, OLEDB, JBDC y, lo que es más importante para usted un proveedor ADO.NET.
http:// www-03. ibm.com/systems/power/software/i/access/windows/dotnet.html
Todos los controladores mencionados anteriormente están disponibles en el software IBM I Access. Tenga en cuenta que, si bien algunas de las funciones de IBM I Acce Access son cobrables, la ex 5250 emulación, y debe haber comprado una licencia; Los proveedores de acceso a los datos no lo son.
incluido en el paquete de IBM I Access es una colección de documentación conocida como el "Kit de herramientas de programadores"
Un ejemplo utilizando el proveedor de datos .NET de ese kit de herramientas:
Public Sub Example()
Dim cn As iDB2Connection = New iDB2Connection("DataSource=mySystemi;")
Dim da As New iDB2DataAdapter("select * from mylib.mytable", cn)
End Sub
Tenga en cuenta que el proveedor (gratuito) .NET no admite el marco de entidades de Microsoft (EF). Si necesita soporte de EF, tendrá que pagar por DB2 Connect
http://www-03.ibm.com/ Software / Productos / EN / DB2-Connect-Family