2016-04-04 5 views
0

動的パラメータ(パラメータ名がわからない)を使用してoracleおよびsqlサーバデータベースでストアドプロシージャを実行する方法があります。動的パラメータ名を使用して複数のデータベースでストアドプロシージャを実行

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"; 

このコードでは、Oracle上で動作しますが、SQL Serverが

プロシージャまたは関数 'pspNameは' パラメータ を期待スロー '@userID'、パラメータ名なので

を供給しませんでした私のコードでは '@userID'ではありません。 おかげ

+0

まあ、パラメータ名は何ですか? – OldProgrammer

+0

パラメータコレクションを作成するメソッドSqlCommandBuilder/OracleCommandBuilder 'DeriveParameters'を使用して目標に到達することができます。しかし、あなたはまだ家から遠いです。特定のSqlCommandBuilderまたはOracleCommandBuilderを作成する必要がある場合は、パラメータ値を設定する実行可能な方法を作成する必要があります。あなたが本当にこのすべての作業を行う準備ができているなら、基礎となるデータベースシステムからデータベースコードを抽象化するのに役立つORMを学ぼうとしないのはなぜですか? – Steve

+0

@oldprogrammer名前に関係なく、sp defnitionでパラメータ名が同じであれば何も期待できません。 –

答えて

1

は、OracleとSQL Serverの間の差があります:

オラクルのパラメータ名は名前のみである必要はありますが、SQL Server用には、パラメータ名の前@記号を追加する必要があります。

コードのどこかで、これを何らかの形で考慮する必要があります。

+0

パラメータ名が "@name"であってもこれは動作しませんが、 "userID"はこの作業だけを置く必要がありますが、 sp defenitionのパラメータ名 –

関連する問題