Подключение к автономные системы as400 using.NET
Я пытаюсь создать веб-приложение .NET с помощью SQL для запроса базы данных AS400. Это моя первая встреча с AS400.
Что мне нужно установить на моей машине (или сервере AS400) для подключения? (В IBM iseries с Access для Windows ??)
каковы компоненты строки подключения?
где я могу найти примеры кодов при построении уровня доступа к данным с помощью команд SQL?
спасибо.
7 ответов
вам нужен поставщик данных As400 .Net. Проверьте здесь: https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzaik/rzaikdotnetprovider.htm
для образцов строки подключения, проверьте здесь: https://www.connectionstrings.com/as-400/
кроме того, проверьте redbook для примеров кода и начала работы. http://www.redbooks.ibm.com/redbooks/pdfs/sg246440.pdf
следующее, что я сделал, чтобы решить проблему.
установлена IBM i Access for Windows
. Не бесплатно
сослался на следующие библиотеки DLL в проекте
- IBM.Данные.В DB2.на iseries.dll файлы
- взаимодействия.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"/>
обновление
IBM не планирует поддерживать IBM i Access for Windows в операционных системах за пределами Windows 8.1. Продукт замены - IBM i Access Client Solutions
Как упоминалось в других ответах, если у вас уже установлен клиент IBM i Access, вы можете использовать IBM.Данные.В DB2.пакет с iseries.
Если у вас нет программного обеспечения IBM i 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();
преобразование из набора записей в DataTable немного неуклюжее и дало мне плохие воспоминания о моих днях VBScript. Производительность, вероятно, не ослепляет быстро, но она работает.
Я использую этот код и работает очень хорошо для меня!
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
недавно я нашел ADO.Net драйвер доступен на NuGet. На моем компьютере установлен клиентский доступ iSeries, поэтому я не могу сказать, работает ли он как автономный, но он подключается. Проблема в том, что я не вижу никаких таблиц или процедур. Я думаю, что может быть схема или библиотека или что-то, до чего я еще не дошел. Я отправлю сообщение, если найду ответ. Тем временем я все еще могу добраться до сервера и написать большую часть своего кода с помощью адаптера NuGet.
очень старый вопрос - но это по-прежнему актуально. Мне нужно было запросить наш 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, оставьте комментарий, и я поделюсь...
проверить http://asna.com/us/ поскольку у них есть некоторые инструменты разработки, работающие с SQL и AS400.