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

네 번째 줄에는 GetForeignKeysTable (tableName : = text)이 없습니다. PosrtgresSQL :매개 변수가 함수에 전달되지 않습니다.

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

매개 변수는 필드 또는 테이블 이름으로 사용할 수 없습니다. 그들은 where 절의 값을 표현하거나 삽입/업데이트에서 값을 표현하는 데 사용됩니다. – Steve

답변

0

동적 SQL을 사용하여 매개 변수로 tablename을 전달할 수 있습니다. 일반적으로 권장하지 않습니다.

귀하의 SQL 문자열이어야합니다, 당신은 수신 된 테이블 이름을 연결 한 후 STR의 SQL 문자열

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

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

방금 ​​* 거대한 * 보안 취약점을 도입했습니다. – Servy

+2

모두 매개 변수에 무엇을 먹이고 있는지에 따라 다릅니다. 컴퓨터를 사용하는 것은 "거대한 보안 취약점"입니다. 나는 사람들이 당황하는 것을 보지 않는다. 그것은 기능입니다. 취약점이 아닙니다. 차분하게하십시오 – user5328504

+1

분명히 보안에 대해 전혀 신경 쓰지 않아서 고려 대상이 아닌 것으로 생각할 수 있습니다. 이름, 은행 계좌 번호, 사회 보장 번호 (또는 기타 관련 세금 ID)를 회신하지 않으십시오. , 전체 주소, 모든 신용 수 번호 및 해당 번호의 청구서 수신 주소. 모든 것을 공개적으로 게시하는 것에 대해 걱정하지 마십시오. 이는 취약점이 아닙니다. – Servy

0

을 실행 여기 쉬 *의 t의 전체가 될 수도 있습니다 ..하지만 난 PARAM 시작했다 생각 "@"IE "@tablename"을 사용하여 "resource"가 클래스가 아닌 문자열인지 확인하십시오.

관련 문제