Laden...

[gelöst] FoxPro DB StoredProcedure bringt werte als "null" und 0 zurück

Erstellt von susisorglos vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.430 Views
susisorglos Themenstarter:in
43 Beiträge seit 2008
vor 6 Jahren
[gelöst] FoxPro DB StoredProcedure bringt werte als "null" und 0 zurück

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

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

naja - auf den ersten Blick passt der Name des Parameters nicht.

VATERID // ElternId

Wenn ich mich recht entsinne macht das durchaus Ärger.

LG

susisorglos Themenstarter:in
43 Beiträge seit 2008
vor 6 Jahren

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

D
985 Beiträge seit 2014
vor 6 Jahren

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

30 Beiträge seit 2007
vor 6 Jahren

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

susisorglos Themenstarter:in
43 Beiträge seit 2008
vor 6 Jahren

@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