2016-04-04 11 views
0

Ich habe eine Methode, die gespeicherte Prozedur auf einem Oracle-und SQL Server-Datenbanken mit dynamischen Parametern ausführen soll (Sie kennen die Parameternamen nicht).Gespeicherte Prozedur auf mehreren Datenbanken mit dynamischen Parameternamen ausführen

IDbCommand cmd = connection.CreateCommand(); 
cmd.CommandType = CommandType.StoredProcedure; 

int i = 0; 
foreach (string parameterName in names) 
    { 
    var param2 = cmd.CreateParameter(); 

    param2.ParameterName = parameterName + "__" + i.ToString(); 
    param2.DbType = DbType.String; 
    param2.Direction = ParameterDirection.Input; 
    param2.Value = parameterName; 
    cmd.Parameters.Add(param2); 
    i++; 
} 
cmd.CommandText = "spName"; 

Dieser Code funktioniert auf Oracle aber SQL Server wirft

Prozedur oder Funktion 'pspName' erwartet Parameter '@userID', die nicht

Da der Parametername geliefert wurde in meinem Code ist nicht "@ userID". Dank

+0

Nun, was ist der Parametername? – OldProgrammer

+0

Sie können versuchen, Ihr Ziel zu erreichen, indem Sie die Methode SqlCommandBuilder/OracleCommandBuilder 'DeriveParameters' verwenden, die die Parametersammlung für Sie erstellt. Aber du bist immer noch weit weg von zu Hause. Sie müssen einen bestimmten SqlCommandBuilder oder OracleCommandBuilder erstellen. Anschließend müssen Sie eine praktikable Möglichkeit zum Einrichten der Parameterwerte erstellen. Wenn Sie wirklich bereit sind, all diese Arbeit zu tun, warum versuchen Sie dann nicht, ein ORM zu lernen, das Ihnen dabei hilft, Ihren Datenbankcode vom zugrunde liegenden Datenbanksystem zu abstrahieren? – Steve

+0

@oldprogrammer es spielt keine Rolle den Namen, nichts funktioniert, wenn der Parametername in der SP-Defension gleich ist. –

Antwort

1

Es gibt einen Unterschied zwischen Oracle und SQL Server:

Die Parameternamen in Oracle müssen der Name nur sein, aber für SQL Server, müssen Sie die @ Zeichen vor dem Parameternamen hinzuzufügen.

Sie müssen dies irgendwie irgendwo in Ihrem Code berücksichtigen.

+0

auch wenn der Parametername ist "@name" das funktioniert nicht, ich muss "userID" nur diese Arbeit setzen, aber ich weiß es nicht der Parametername in der SP-Verteidigung –

Verwandte Themen