verwendetes Datenbanksystem: FoxPro 9.0 SP2
Hallo Community,
Aus C# Visual Studio 2017 greife ich über eine storedProcedure auf eine FoxPro VFP 9.0 SP2 Datenbank zu.
Name der Datenbank hans.dbc
Tabelle hanse.dbf
Name der storedProcedure getdatenbyid.prg
Inhalt der storedProcedure
PROCEDURE getdatenbyid (VATERID as Intger)
SELECT * FROM hanse WHERE hanse_id = VATERID
RETURN
Status der Datenbank: open
die offene Datenbank wird aus C# angesprochen durch
using (IDbConnection db = new OleDbConnection(ConfigurationManager.ConnectionStrings[GlobaleVariablen.CN].ConnectionString))
{
try
{
{
if (db.State == ConnectionState.Closed)
db.Open();
return db.Query<Daten>("getdatenbyid", new { VaterID = hanse_id},commandType: CommandType.StoredProcedure).ToList();
}
}
catch ...
Der Zugriff auf die Tabelle hanse.dbf erfolgt innerhalb FoxPro über die FoxPro-eigene Workbench problemlos.
Dort kann ich die storedProcedure auch über eine weitere test.prg ansprechen
und Daten in einer Messagebox anzeigen lassen.
Greife ich jedoch über C# in oben beschriebener Weise auf die Tabelle zu, erhalte ich nur
eine 0 für den hanse_id (integer). Alle übrigen Stringwerte kommen mit null rüber.
Selbst wenn ich die hanse_id=3117 in der storedProcedure direkt setze, wird der Datensatz in FoxPro gefunden,
aber ohne Werte an das aufrufende Programm C# zu übergeben.
Definiere ich die Variable hanse_id=3117 direkt, wird auch kein Wert an C# zurückgegeben.
Selbst RETURN (hanse_id) oder RETURN hanse_id gibt die Werte nicht zurück.
Die Abfrageweise klappt mit anderen Datenbanken (MySQL und SQL) problemlos.
Im C# Programm habe ich zuvor schon ganze Tabellen aus dieser DB abgefragt.
Nur diese Stelle mit der storedProcedure, will die Daten nicht hergeben.
Was übersehe ich?
Gruß susi
VS 2017 Community
Hi,
naja - auf den ersten Blick passt der Name des Parameters nicht.
VATERID // ElternId
Wenn ich mich recht entsinne macht das durchaus Ärger.
LG
sorry... ist hier leider ein Übertragungsfehler und nicht die Lösung....
mir quellen die Augen schon über.
lässt sich leider nicht mehr editieren.
alle ElternID bitte in VaterID wandeln 😃
susinichtsorglos
VS 2017 Community
lässt sich leider nicht mehr editieren.
Halte ich für ein Gerücht. Einfach mal auf editieren
über deinem Beitrag klicken, dann tut das schon
Ja, editieren geht ganz vorzüglich
Hallo,
dein Problem liegt daran, dass du in der Storedprocedure durch die SQL-Abfrage einen FoxPro-Cursor erstellst. Dieser Cursor ist per se erst mal nur in FoxPro sichtbar. Um diesen Cursor an den OldDB-Treiber und damit an dein C#-Programm weiter zu geben musst du die StoredProcedure wie folgt erweitern:
PROCEDURE getdatenbyid (VATERID as Intger)
SELECT * FROM hanse WHERE hanse_id = VATERID into cursor curTemp
SETRESULTSET('curTemp')
RETURN
Viele Grüße
Jens
@Jens
Vielen Dank, der Befehl 'SETRESULTSET' hat mir gefehlt.
Hier noch ein weiterer Beleg dazu.
http://fox.wikis.com/wc.dll?FoxStoredProceduresAndOleDBWIN_COM_API
Herzlichen Dank,
susi
VS 2017 Community