使用动态参数名称在多个数据库上执行存储过程

时间:2016-04-04 11:30:47

标签: c# sql-server oracle stored-procedures

我有一个方法应该使用动态参数在oracle和sql server数据库上运行存储过程(你不知道参数名称)。

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'。 感谢

1 个答案:

答案 0 :(得分:1)

Oracle和SQL Server之间存在差异:

Oracle中的参数名称只能是名称,但对于SQL Server,您需要在参数名称前添加@符号。

你需要在代码中的某个地方考虑​​这个问题。