2016-11-30 5 views
0
this.command.CommandText = "\"GetForeignKeysTable\""; 
this.command.CommandType = CommandType.StoredProcedure; 
this.command.Parameters.AddWithValue("tableName", resource); 
FKDataTable.Load(this.command.ExecuteReader()); 

In der vierten Zeile erhalte ich einen Fehler: GetForeignKeysTable (tableName: = Text) ist nicht vorhanden. PostgreSQL:Die Parameter übergeben nicht die Funktion

CREATE OR REPLACE FUNCTION "GetForeignKeysTable"(tableName text) 
RETURNS TABLE ("FKFieldName" integer, "PKTableName" text) AS $$ 
BEGIN 
RETURN QUERY SELECT "Id", "FIO" FROM tableName; 
END; 
$$ LANGUAGE plpgsql; 
+2

Parameter können nicht für Felder oder Tabellennamen verwendet werden. Sie werden verwendet, um Werte für where-Klausel oder für Werte in insert/update – Steve

Antwort

0

Sie können einen Tabellennamen als Parameter mit dynamischen SQL übergeben. Beachten Sie, dass es in der Regel nicht empfohlen wird.

Ihre SQL sollte ein String sein, dann verketten Sie den Tabellennamen empfangen und dann str SQL-Zeichenfolge

.....create procedure etc etc etc ....... 

/* Build Transact-SQL String with parameter value */ 
SET @SQLQuery = 'SELECT * FROM ' + myTable 
/* Execute Transact-SQL String */ 
EXECUTE(@SQLQuery) 
+3

auszudrücken. Sie haben gerade eine * gigantische * Sicherheitslücke eingeführt. – Servy

+2

Alles hängt davon ab, was Sie Ihrem Parameter zuführen. Die Verwendung eines Computers ist eine "gigantische Sicherheitslücke" für sich. Ich sehe keine Menschen in Panik geraten. Es ist eine Funktion. Keine Sicherheitslücke. Bitte entspannen Sie sich – user5328504

+1

Da Sie sich scheinbar überhaupt nicht um Sicherheit kümmern, und betrachten Sie es als etwas nicht wert, überhaupt in Betracht zu ziehen, warum antworten Sie nicht mit Ihrem vollständigen Namen, Bankkontonummern, Sozialversicherungsnummer (oder anderen anwendbaren Steuer-ID) , vollständige Adresse, alle Kreditnummern und Rechnungsadressen für diese Nummern. Mach dir keine Sorgen darüber, alles öffentlich zu posten, es ist keine Schwachstelle. – Servy

0

ich kann sein, voller sh * t hier ausführen .. aber ich dachte, die param beginnen musste mit "@" IE "@tablename", stellen Sie auch sicher "Ressource" ist eine Zeichenfolge, keine Klasse/was auch immer ...

Verwandte Themen