c# - 无法在 Entity Framework 中的 DbCommand 中传递参数

标签 c# sql-server entity-framework dbcommand

当我尝试使用 DbCommand 将参数传递给存储过程时出现错误

返回错误:

Procedure or function 'Procedure_Name' expects parameter '@TEID', which was not supplied.

这些是我的程序参数:

@PageNumber INT = 1,
@PageSize INT = 50,
@StartTime nvarchar(max) = -1 ,
@EndTime nvarchar(max) = -1 ,
@Month NVARCHAR(2) = -1,
@Year NVARCHAR(4) = -1,
@Day NVARCHAR(2) = -1,
@Hour NVARCHAR(2)=-1,
@TEID nvarchar(max) ,
@IgnoreIdlingTime int=120,
@DrivingTime int=300,--5 minutes by default
@CalculationFactor nvarchar(10)='speed'

我执行过程和传递参数的代码:

using (var context = new GPSModel())
{
    context.Database.Initialize(force: false);

    // Create a SQL command to execute the stored procedure
    var cmd = context.Database.Connection.CreateCommand();
    cmd.CommandText = "Procedure_Name";

    DbParameter TEIDParam = cmd.CreateParameter();
    TEIDParam.ParameterName = "@TEID";
    TEIDParam.DbType = System.Data.DbType.String;
    TEIDParam.Direction = ParameterDirection.Input;
    TEIDParam.Value = TEID;
    cmd.Parameters.Add(TEIDParam);

    context.Database.Connection.Open();

    var reader = cmd.ExecuteReader();
}

我尝试删除 @ 符号并发送 SqlParameter 而不是 DbParameter 但我仍然遇到同样的问题。

如果我的存储过程非常复杂并且包含多个集合,是否还有其他方法可以做到这一点

谢谢...

最佳答案

您可以使用下面的代码来解决这个错误。我添加了 cmd.CommandType = CommandType.StoredProcedure;。现在它可以正常工作了。

    var cmd = context.Database.Connection.CreateCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Procedure_Name";
    DbParameter TEIDParam = cmd.CreateParameter();
    TEIDParam.ParameterName = "@TEID";
    TEIDParam.DbType = System.Data.DbType.String;
    TEIDParam.Direction = ParameterDirection.Input;
    TEIDParam.Value = TEID;
    cmd.Parameters.Add(TEIDParam);

当您使用存储过程时,您必须将 CommandType 属性设置为 StoredProcedure,然后您应该将 CommandText 属性设置为名称的存储过程。当您调用其中一种 Execute 方法时,该命令会执行此存储过程。

关于c# - 无法在 Entity Framework 中的 DbCommand 中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49606640/

相关文章:

c# - 我想同时在两个模型上应用 for-each 循环 Asp.Net MVC

sql-server - SSIS 包 FTP 任务错误 : Directory is not specified in the file connection manager "User::ProcessingFileLocation"

mysql - SQL查询用wind显示结果,但它跳过某些行

c# - 使用导航属性发布新实体

c# - 为什么我应该在使用位图时保持流打开

c# - 如何在Azure函数eventhub触发器中处理CancellationToken

c# - 将异步调用变成同步调用

asp.net - XML 片段中不允许使用 DTD - xml 转为 sql

entity-framework - EF 与 Azure - 混合 SQL Server 和 Windows Azure 存储

c# - 为什么在表达式树中需要转换