Moh*_*'ad 2 c# sql-server entity-framework dbcommand
I have error when I try to pass parameter to stored procedure using DbCommand
Error returned:
Procedure or function 'Procedure_Name' expects parameter '@TEID', which was not supplied.
These are my procedure parameters:
@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'
Run Code Online (Sandbox Code Playgroud)
My code to execute procedure and pass parameters:
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();
}
Run Code Online (Sandbox Code Playgroud)
I tried to remove @ sign and send SqlParameter instead of DbParameter but still I have the same issue.
Is there any other way to do that where my stored procedure is very complex and contains multi sets
Thanks...
您可以使用以下代码来解决错误。我已经添加了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);
Run Code Online (Sandbox Code Playgroud)
当您使用存储过程时,您必须将CommandType属性设置为StoredProcedure,然后您应该将CommandText属性设置为存储过程的名称。当您调用其中一种方法时,该命令会执行此存储过程Execute。