Connexion à AS400 using.NET

j'essaie de construire une application web .NET en utilisant SQL pour interroger la base de données AS400. C'est la première fois que je rencontre L'AS400.

Que dois-je installer sur ma machine (ou le serveur AS400) pour me connecter? (IBM iSeries accès pour Windows ??)

Quels sont les composants de la chaîne de connexion?

Où puis-je trouver des exemples de codes sur la construction de la couche D'accès aux données à L'aide de commandes SQL?

Merci.

36
demandé sur madatanic 2010-07-26 20:04:53

7 réponses

vous avez besoin du fournisseur de données AS400 .Net. Vérifiez ici: https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzaik/rzaikdotnetprovider.htm

pour les échantillons de chaîne de connexion, consultez ici: https://www.connectionstrings.com/as-400/

aussi, consultez le redbook pour des exemples de codes et pour commencer. http://www.redbooks.ibm.com/redbooks/pdfs/sg246440.pdf

26
répondu dcp 2018-05-04 01:53:00

ce qui Suit est ce que j'ai fait pour résoudre le problème.

Installé le IBM i Access for Windows. Pas gratuit

référé les DLLA suivantes dans le projet

  • IBM.Données.DB2.iSeries.dll
  • Interop.cwbx.dll (si la file d'attente de données est utilisée)
  • Interop.AD400.dll (si la file d'attente des données est utilisée)

Accès Aux Données

  using (iDB2Command command = new iDB2Command())
        {
            command.Connection = (iDB2Connection)_connection;
            command.CommandType = CommandType.Text;
            command.Parameters.AddWithValue(Constants.ParamInterfaceTransactionNo, 1);
            command.CommandText = dynamicInsertString;
            command.ExecuteScalar();
        }

Chaîne De Connexion

<add name="InterfaceConnection" 
connectionString="Data Source=myserver.mycompany.com;User ID=idbname;Password=mypassxxx;
Default Collection=ASIPTA;Naming=System"/>

UPDATE

IBM ne prévoit pas de prendre en charge L'accès IBM i Pour Windows sur les systèmes d'exploitation au-delà de Windows 8.1. Le produit de remplacement est IBM i Access Client Solutions

IBM i Access Client Solutions

10
répondu Lijo 2018-02-27 16:32:41

comme mentionné dans d'autres réponses, si vous avez le client IBM i Access déjà installé, vous pouvez utiliser IBM.Données.DB2.le paquet iSeries.

si vous n'avez pas le logiciel IBM i Access, vous pouvez utiliser JTOpen et utilisez les pilotes Java. Vous aurez besoin du paquet nuget JT400.78 qui se chargera de l'exécution de L'IKVM.

dans mon cas, je devais interroger une base de données DB2 sur un AS400 et produire un DataTable. J'ai trouvé plusieurs indices et petits des bribes de code mais rien de complet, alors j'ai voulu partager ce que j'ai pu construire au cas où ça aiderait quelqu'un d'autre:

using com.ibm.as400.access;
using java.sql;

var sql = "SELECT * FROM FOO WITH UR";

DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
Connection conn = DriverManager.getConnection(
    "jdbc:as400:" + ServerName + ";prompt=false", UserName, Password);

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int ct = md.getColumnCount();

DataTable dt = new DataTable();
for(int i=1; i<=ct; i++)
    dt.Columns.Add(md.getColumnName(i));

while (rs.next())
{
    var dr = dt.NewRow();
    for (int i = 1; i <= ct; i++)
        dr[i - 1] = rs.getObject(i);
    dt.Rows.Add(dr);
}
rs.close();

la conversion de RecordSet en DataTable est un peu compliquée et m'a donné de mauvais flashbacks à mes jours de VBScript. La Performance n'est pas aveuglante, mais ça marche.

2
répondu Wildcat Matt 2018-03-23 02:45:33

j'utilise ce code et je travaille très bien pour moi!

  Try
        Dim sqltxt As String = "SELECT * FROM mplib.pfcarfib where LOTEF=" & My.Settings.loteproceso
        dt1 = New DataTable
        Dim ConAS400 As New OleDb.OleDbConnection
        ConAS400.ConnectionString = "Provider=IBMDA400;" & _
        "Data Source=192.168.100.100;" & _
        "User ID=" & My.Settings.usuario & ";" & _
        "Password=" & My.Settings.contrasena
        Dim CmdAS400 As New OleDb.OleDbCommand(sqltxt, ConAS400)
        Dim sqlAS400 As New OleDb.OleDbDataAdapter
        sqlAS400.SelectCommand = CmdAS400
        ConAS400.Open()
        sqlAS400.Fill(dt1)
        grid_detalle.DataSource = dt1
        grid_detalle.DataMember = dt1.TableName
    Catch ex As Exception
        DevExpress.XtraEditors.XtraMessageBox.Show("Comunicación Con El AS400 No Establecida, Notifique a Informatica..", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Me.Close()
    End Try
0
répondu raabsoft 2013-02-07 19:07:45

j'ai récemment trouvé le ADO.Net pilote disponible sur NuGet. J'ai installé l'accès client iSeries sur mon PC, donc je ne peux pas dire s'il fonctionne comme un autonome, mais il se connecte. Le seul problème, c'est que je ne vois aucune table ou procédure. Je pense qu'il y a peut-être un schéma ou une bibliothèque ou quelque chose que je n'ai pas encore compris. Je vais poster si je trouve la réponse. En attendant, je peux toujours accéder au serveur et écrire la plupart de mon code avec L'adaptateur NuGet.

0
répondu Joseph Morgan 2015-12-11 16:47:31

question extrêmement ancienne - mais cela reste pertinent. J'avais besoin d'interroger notre AS/400 en utilisant .NET mais aucune des réponses ci-dessus n'a fonctionné et j'ai donc fini par créer ma propre méthode en utilisant OleDb:

   public DataSet query_iseries(string datasource, string query, string[] parameterName, string[] parameterValue)
    {
        try
        {
            // Open a new stream connection to the iSeries
            using (var iseries_connection = new OleDbConnection(datasource))
            {
                // Create a new command
                OleDbCommand command = new OleDbCommand(query, iseries_connection);

                // Bind parameters to command query
                if (parameterName.Count() >= 1)
                {
                    for (int i = 0; i < parameterName.Count(); i++)
                    {
                        command.Parameters.AddWithValue("@" + parameterName[i], parameterValue[i]);
                    }
                }

                // Open the connection
                iseries_connection.Open();

                // Create a DataSet to hold the data
                DataSet iseries_data = new DataSet();

                // Create a data adapter to hold results of the executed command
                using (OleDbDataAdapter data_adapter = new OleDbDataAdapter(command))
                {
                    // Fill the data set with the results of the data adapter
                    data_adapter.Fill(iseries_data);

                }

                return iseries_data;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return null;
        }
    }

Et vous pouvez l'utiliser comme ceci:

DataSet results = query_iseries("YOUR DATA SOURCE", "YOUR SQL QUERY", new string[] { "param_one", "param_two" }, new string[] { "param_one_value", "param_two_value"}); 

Elle retourne un DataSet des résultats retournés. Si quelqu'un a besoin/veut une méthode pour insérer/mettre à jour des valeurs dans le AS/400 D'IBM, laissez un commentaire et je partagerai...

0
répondu Mark 2018-09-10 12:00:40

découvrez http://asna.com/us/ comme ils ont des outils de développement avec SQL et l'AS400.

-1
répondu user1322600 2012-04-10 15:34:42