【发布时间】:2016-04-04 11:30:46
【问题描述】:
我有一个方法应该使用动态参数在 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'。 谢谢
【问题讨论】:
-
嗯,参数名是什么?
-
您可以尝试使用为您构建参数集合的方法 SqlCommandBuilder/OracleCommandBuilder
DeriveParameters来达到您的目标。但是你离家还有很长的路要走。您需要创建一个特定的 SqlCommandBuilder 或 OracleCommandBuilder,然后您需要创建一种可行的方法来设置参数值。如果您真的准备好完成所有这些工作,那么为什么不尝试学习一个 ORM 来帮助您从底层数据库系统中抽象出数据库代码呢? -
@oldprogrammer 名称无关紧要,当 sp 定义中的参数名称相同时,没有任何效果。
-
@steve 我正在使用实体框架...我认为我需要的是明确的
标签: c# sql-server oracle stored-procedures