I am trying to run a simple stored procedure using a c# application I am writing that is using Entity Framework. Here is my stored procedure:
ALTER PROCEDURE [dbo].[spupdTblAlertBySiteAlert]
@sitealert_fk int,
@op nvarchar(50) OUTPUT
AS
SET NOCOUNT ON
BEGIN TRY
UPDATE tblALERT SET STATUS = '2'
WHERE SITEALERT_FK = @sitealert_fk
AND STATUS = '1'
SELECT @op = 'Test'
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
SELECT @op = 'TEST2'
END CATCH
Here is my code that is getting rejected:
static void Main(string[] args)
{
var _db = new ConsumptionEntities();
ObjectParameter stat = new ObjectParameter("stat", typeof(string));
_db.spupdTblAlertBySiteAlert(1,stat).First();
}
Whenever I run this I get an error on the following generated EF code:
public virtual ObjectResult<string> spupdTblAlertBySiteAlert(Nullable<int> sitealert_fk, ObjectParameter op){
var sitealert_fkParameter = sitealert_fk.HasValue ?
new ObjectParameter("sitealert_fk", sitealert_fk) :
new ObjectParameter("sitealert_fk", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<string>("spupdTblAlertBySiteAlert", sitealert_fkParameter, op);
}
HResult=-2146232004
Message=An error occurred while executing the command definition. See the inner exception for details.
Source=System.Data.Entity
StackTrace:
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Objects.ObjectContext.CreateFunctionObjectResult[TElement](EntityCommand entityCommand, ReadOnlyMetadataCollection`1 entitySets, EdmType[] edmTypes, MergeOption mergeOption)
at System.Data.Objects.ObjectContext.ExecuteFunction[TElement](String functionName, MergeOption mergeOption, ObjectParameter[] parameters)
at System.Data.Objects.ObjectContext.ExecuteFunction[TElement](String functionName, ObjectParameter[] parameters)
at Test_Code.ConsumptionEntities.spupdTblAlertBySiteAlert(Nullable`1 sitealert_fk, ObjectParameter op) in c:\VS_Testproject\Windows_Services\Test_Code\Test_Code\Model1.Context.cs:line 60
at Test_Code.Program.Main(String[] args) in c:\VS_Testproject\Windows_Services\Test_Code\Test_Code\Program.cs:line 60
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.Data.SqlClient.SqlException
HResult=-2146232060
Message=Procedure or function 'spupdTblAlertBySiteAlert' expects parameter '@op', which was not supplied.
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
Class=16
LineNumber=0
Number=201
Procedure=spupdTblAlertBySiteAlert
Server=NMILLER-LT\nmiller
State=4
StackTrace:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
InnerException:
I have no idea what is going on with this. Any help would be appreciated.