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.
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
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
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.
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
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.
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...
découvrez http://asna.com/us/ comme ils ont des outils de développement avec SQL et l'AS400.