C# 使用各种参数从实体框架调用存储过程
我有3个存储过程命名为:C# 使用各种参数从实体框架调用存储过程,c#,sql,sql-server,entity-framework,stored-procedures,C#,Sql,Sql Server,Entity Framework,Stored Procedures,我有3个存储过程命名为: 收到 未收到 更新状态 RECEIVED和NOTRECEIVED具有以下params @ProductNumber, @ProductName UPDATESTATUS具有: @BatchNumber 我已经创建了一个方法,用于执行名为UPDATESTATUS的存储过程。我希望使其灵活,以便可以为所有存储过程调用它,而不考虑参数,并将存储过程名称传递给该方法 方法如下: public async Task<int> ExecuteSproc(SqlPar
RECEIVED
和NOTRECEIVED
具有以下params
@ProductNumber,
@ProductName
UPDATESTATUS
具有:
@BatchNumber
我已经创建了一个方法,用于执行名为UPDATESTATUS
的存储过程。我希望使其灵活,以便可以为所有存储过程调用它,而不考虑参数,并将存储过程名称传递给该方法
方法如下:
public async Task<int> ExecuteSproc(SqlParameter[] sqlParameter)
{
int result = await db.Database.ExecuteSqlCommandAsync("exec UPDATESTATUS @BatchNumber", sqlParameter);
return result;
}
请告诉我我将如何做到这一点。我查看了帖子,但答案建议我必须指定参数名称,而我正在尝试使其更通用一些您需要以KeyValuePair格式传递存储过程名称和参数
public List<V> ExecStoredProc<V>(string storedProcedureName, KeyValuePair<string, string>[] parameters)
{
if (parameters.Any())
{
SqlParameter[] sqlParams = patameters.Select(x => new SqlParameter("@" + x.Key, x.Value)).ToArray();
var result = _context.Database
.SqlQuery<V>(storedProcedureName + " " + string.Join(" ", patameters.Select(x => "@" + x.Key)), sqlParams)
.ToList();
_context.Database.Connection.Close();
return result;
}
else
{
var result = _context.Database
.SqlQuery<V>(storedProcedureName)
.ToList();
_context.Database.Connection.Close();
return result;
}
}
public List ExecStoredProc(字符串storedProcedureName,KeyValuePair[]参数)
{
if(parameters.Any())
{
SqlParameter[]sqlParams=patameters.Select(x=>newSQLParameter(“@”+x.Key,x.Value)).ToArray();
var result=\u context.Database
.SqlQuery(storedProcedureName+“”+string.Join(“”),patameters.Select(x=>“@”+x.Key)),sqlParams)
.ToList();
_context.Database.Connection.Close();
返回结果;
}
其他的
{
var result=\u context.Database
.SqlQuery(存储过程名称)
.ToList();
_context.Database.Connection.Close();
返回结果;
}
}
执行
var parmas = new KeyValuePair<string, string>[] { new KeyValuePair<string, string>("BatchNumber", BatchId.ToString()) };
List<User> list = ExecStoredProc<User>("UPDATESTATUS", parmas);
var parmas=newkeyvaluepair[]{newkeyvaluepair(“BatchNumber”,BatchId.ToString())};
List List=ExecStoredProc(“UPDATESTATUS”,parmas);
您可以传递KeyValuePair
而不是SqlParameter
数组,并根据链接的帖子生成所需的字符串。这样你可以让它更通用一点。@PaulKaram如果你能提供一个例子,你的解决方案也应该有效,这取决于你是如何使用它的?您能否提供实际调用的代码ExecuteSproc
?还有,你在尝试时有什么错误吗?@PaulKaram我已经更新了我的code@Code运行此命令时是否有任何错误?
var parmas = new KeyValuePair<string, string>[] { new KeyValuePair<string, string>("BatchNumber", BatchId.ToString()) };
List<User> list = ExecStoredProc<User>("UPDATESTATUS", parmas);