Подтвердить что ты не робот

Подключитесь к AS400 с помощью .NET.

Я пытаюсь создать веб-приложение .NET с использованием SQL для запроса базы данных AS400. Это мой первый раз столкновение с AS400.

Что мне нужно установить на моем компьютере (или сервере AS400) для подключения? (IBM iSeries Access для Windows?)

Каковы компоненты строки подключения?

Где я могу найти примеры кода при построении уровня доступа к данным с помощью команд SQL?

Спасибо.

4b9b3361

Ответ 2

Вот что я сделал, чтобы решить эту проблему.

Установил IBM я Access for Windows. Не бесплатно

Приведены следующие dll в проекте

  • IBM.Data.DB2.iSeries.dll
  • Interop.cwbx.dll (если используется очередь данных)
  • Interop.AD400.dll (если используется очередь данных)

Доступ к данным

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

Строка подключения

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

ОБНОВИТЬ

я Доступ для Windows в операционных системах, отличных от Windows 8.1, может не поддерживаться. Попробуйте заменить продукт IBM я Access Client Solutions

Клиентские решения IBM я Access

Ответ 3

Как упоминалось в других ответах, если у вас уже установлен клиент IBM я Access, вы можете использовать пакет IBM.Data.DB2.iSeries.

Если у вас нет программного обеспечения IBM я Access, вы можете использовать JTOpen и использовать драйверы Java. Вам понадобится пакет nuget JT400.78, который запустит среду выполнения IKVM.

В моем случае мне нужно было запросить базу данных DB2 на AS400 и вывести DataTable. Я нашел несколько подсказок и небольших фрагментов кода, но ничего сложного, поэтому я хотел поделиться тем, что смог создать, на случай, если это поможет кому-то другому:

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();

Преобразование из RecordSet в DataTable немного неуклюже и дало мне плохие воспоминания о моих днях VBScript. Производительность, вероятно, не ослепляет быстро, но это работает.

Ответ 4

Крайне старый вопрос - но он все еще актуален. Мне нужно было запросить наш AS/400 с использованием .NET, но ни один из приведенных выше ответов не сработал, и в итоге я создал собственный метод с использованием 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;
        }
    }

И вы бы использовали это так:

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

Возвращает DataSet возвращенных результатов. Если кому-то нужен/нужен метод для вставки/обновления значений в IBM AS/400, оставьте комментарий, и я поделюсь с вами...

Ответ 5

Я использую этот код и очень хорошо работаю для меня!

  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

Ответ 6

Недавно я нашел драйвер ADO.Net на NuGet. У меня есть клиентский доступ iSeries, установленный на моем ПК, поэтому я не могу сказать, работает ли он как автономный, но он подключается. Единственная проблема в том, что я не вижу на самом деле никаких таблиц или процедур. Я думаю, что может быть схема или библиотека или что-то, до чего я до сих пор не дошел. Я отправлю сообщение, если найду ответ. Тем временем я все еще могу добраться до сервера и написать большую часть своего кода с помощью адаптера NuGet.

Ответ 7

Откажитесь от http://asna.com/us/, поскольку у них есть некоторые средства разработки, работающие с SQL и AS400.