2016-10-09 15 views
0

Ich habe Probleme mit der Verwendung von ORACLE-Parameter über DAPPER. Die empfangene Fehlermeldung lautet "ORA-00942: Tabelle oder Ansicht existiert nicht".Oracle-Parameter mit Dapper Problem

Allerdings funktioniert der Code ohne den Parameter, und ich vermute, dass dies eine einfache Oracle-Parameter Syntax Problem ist. Der Code folgt:

public List<ForecastData>GetByFiscalYear(string fiscalYear) 
    { 
     List<ForecastData> queryResults = new List<ForecastData>(); 

     String sqlQuery = @"SELECT RES.FISCALYEAR year FROM RESOURCE_AVAILABILITY RES WHERE RES.FISCALYEAR = :p_fiscalYear"; 

     using (var oraCon = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Oracle_HRZD"].ToString())) 
     { 
      oraCon.Open(); 
      queryResults = oraCon.Query<ForecastData>(sqlQuery, new { p_fiscalYear = fiscalYear }).ToList(); 
     } 

     return new List<ForecastData>(queryResults); 
    } 

Jede mögliche Unterstützung sehr ...

+0

Ihre Select-Anweisung scheint ziemlich falsch zu sein. Meinst du: _SELECT RES.FISCALYEAR VON RES WHERE RES.FISCALYEAR =: p_fiscalYear "; _ – Steve

+1

Die Abfrage verwendet Spaltennamen Alias ​​und wird erfolgreich ausgeführt, wenn der Parameter entfernt wird. Meine Frage bezieht sich auf den Oracle-Parameter. – tommi

+0

Der Fehler beschwert sich über die Tabellenname, nicht der Parameter Sind Sie in der Lage, die Abfrage auszuführen, wenn Sie den Jahr-Wert fest codieren? –

Antwort

1

Normalerweise erkennt, ORA-00942 ist genau das, was sie sagt, es ist nicht die Tabelle/View finden (RESOURCE_AVAILABILITY) Sie Auswahl von. Es befindet sich also nicht im Schema für den Benutzer, mit dem Sie sich anmelden, oder dem Benutzer wurde SELECT für die Tabelle/Sicht nicht erteilt, wenn es sich um ein anderes Schema handelt.

Aber Sie sagen, dass wenn Sie WHERE RES.FISCAL_YEAR :p_fiscalyear entfernen, dann funktioniert es. So scheint es, als ob Sie Berechtigungen für die Tabelle ausgewählt haben. Meinst du das ganze entfernen wo Auswahl oder hast du getestet einen festen String einzugeben, wie in WHERE RES.FISCAL_YEAR='2016'?

Meine andere Top-Tipp ist, Wireshark zu laufen und zu sehen, was wirklich an die Datenbank gesendet wird, in der Regel verbinden Sie auf Port 1521 Filter auf diesem.

+1

Wer downvoted sollte wissen Oracle ** antwortet nicht mit "Zugriff verweigert", wenn der Benutzer keine Berechtigungen hat. Wenn jemand keine Berechtigung zum Zugriff auf eine Tabelle oder Sicht hat, wird der Fehler angezeigt, dass die Tabelle fehlt –

1

Die Antwort bestand darin, den vollständig qualifizierten Datenbankobjektnamen einschließlich des Schemas zu verwenden. Danke für deine Hilfe.