PDA

View Full Version : Command Call über c#



Seiten : [1] 2

Oli001
17-06-10, 09:33
Hallo,

ich habe ein c# Anwendung. Aus dieser soll ein CommandString ausgeführt werden. Kann mir jemand ein Tutorial nennen, wo das beschrieben ist oder hat jemand ein Codeschnipsel, das aufzeigt wie das funktioniert?

Danke Oli

andreaspr@aon.at
17-06-10, 09:54
Hi Oli,
ein gutes Tutorial ist folgender Link:
myCSharp.de - DIE C# und .NET Community | Artikel | [Artikelserie] Parameter von SQL Befehlen (http://www.mycsharp.de/wbb2/thread.php?postid=3512877#post3512877)
Da wird beschrieben wie man das ganze mit Parameter angehen kann.
Statt ein Insert, machst du halt ein Call, und:
MyAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;

Es kommt darauf an, was du als rückgabewert erwartest (Nichts oder Tabelle ...?).

Willst du eine Stored Procedure von dir aufrufen oder ein QCMDEXC ...?

lg

Oli001
17-06-10, 10:01
Hallo Andreas,

ich möchte ein QCMDEXC mit einem vorgegebenen CommandString aufrufen. Das ist eben mein Problem.

Danke Oli

andreaspr@aon.at
17-06-10, 10:07
Es gibt im Forum schon ein paar Themen darüber:
http://newsolutions.de/forum-systemi-as400-i5-iseries/system-i-hauptforum/15133-call-aus-excel-vba.html?highlight=QCMDEXC

Oli001
17-06-10, 10:14
Hallo,

ich habe eine Connection zu As400:

private static System.Data.OleDb.OleDbConnection conn;

Hier ist aber die Rede von ADODB. Ist das einen Library, die ich extra einbinden muss?

Grüße Oli

andreaspr@aon.at
17-06-10, 10:30
Ob du OleDB, ADODB, ODBC oder die Nativ IBM.DB2 Klassen verwendest ist fürs erste mal egal. Arbeiten kannst du mit verschiedene.
Damit du die OleDB-Klasse verwenden kannst, musst du die "Microsoft ActiveX Data Objects ... Library" hinzufügen (COM).
Wichtig ist nur, dass du den korrekten Connection-String angiebst.
AS/400 (IBM iSeries) Connection String Samples - ConnectionStrings.com (http://www.connectionstrings.com/as-400)

OleDB ist aber meiner Meinung nach nicht die beste Wahl. Ich verwende die ODBC-Klasse.

Oli001
17-06-10, 10:41
Dann sollte das so funktionieren:

conn.Execute("CALL QCMDEXC ('" + command + "', " + command.Length + ", 'IGC'" + ")", out recAff, 0);

??

Fuerchau
17-06-10, 10:49
command.length musst du allerdings als Zahl mit 10 Vorkomma und 5 Nachkomma formatieren.
In VB geht das mit

Format(command.length, "0000000000.00000")

Der 3. Parameter ist nicht erforderlich und nur für DBCS (IGC) gültig.
Enthält dein Command Hochkomma, dann sind diese vorher zu verdoppeln.

Oli001
17-06-10, 10:53
Hi,

hab den 3.Paramter rausgeschmissen.
Jetzt funktioniert es.

Allerdings auch mit command.Length ohne Formatierung...

Oder ist das nur Zufall und es kann irgendwann zu Problemen führen?

Grüße Oli

Fuerchau
17-06-10, 10:58
Müsste eigentlich Zufall sein da der 2. Parameter ja dec(15, 5) sein muss.
Je nach Release wird aber ein Call auf QCMDEXC speziell erkannt.