2010-11-13 10 views
2

J'essaie d'utiliser la fonction stockée de la base de données Oracle Express dans l'application C#.L'utilisation de la fonction SQL stockée donne une instruction SQL non valide

OdbcCommand com = new OdbcCommand("SILNIA",sqlConn); 
com.CommandType = CommandType.StoredProcedure; 

OdbcParameter sqlParam = new OdbcParameter("@ReturnValue", OdbcType.Int); 
sqlParam.Direction = ParameterDirection.ReturnValue; 
com.Parameters.Add(sqlParam); 
com.ExecuteNonQuery(); 

label1.Content = com.Parameters["@ReturnValue"].Value.ToString(); 

où la fonction SILNIA (compile sans erreur) est défini:

create or replace 
FUNCTION SILNIA RETURN NUMBER IS 
w NUMBER := 1; 
BEGIN 
for i in 1..5 loop 
w:=w*i; 
end loop; 

RETURN w; 
END SILNIA; 

En ligne:

com.ExecuteNonQuery(); 

i get

ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00900: invalid SQL statement. 

mais cela fonctionne fonctionne sans problèmes:

OdbcCommand sqlCom = new OdbcCommand("SELECT SILNIA() FROM DUAL", sqlConn); 
label1.Content = sqlCom.ExecuteScalar().ToString(); 

Répondre

1

Vous ne pouvez pas utiliser ExecuteNonQuery() pour exécuter un SP. Vous devez faire autre chose - ExecuteScalar ou ExecuteReader

Ceci est dû au fait que ExecuteNonQuery() est conçu pour fonctionner uniquement avec les instructions UPDATE, INSERT et DELETE.

+0

J'ai essayé deux OdbcDataReader r = com.ExecuteReader(); et label1.Content = (chaîne) com.ExecuteScalar(); au lieu de com.ExecuteNonQuery(); et la même erreur se produit. – mmatloka

+1

Vous êtes sûr de ne pas pouvoir exécuter ExecuteNonQuery() pour les SP? Je suis assez confiant que vous pouvez l'appeler ... – mint

0

Votre fonction accepte aucun paramètre - essayez ceci:

SELECT SILNIA FROM DUAL