为什么数据不是从存储过程存储在数据库中的?

时间:2017-05-17 19:19:29

标签: c# sql-server entity-framework stored-procedures asp.net-web-api

我正在使用Entity Framework,并尝试使用此存储过程在SQL Server中存储一些数据:

create procedure [dbo].[Sp_OrderList]
    @OrderId int,
    @OrderName varchar(50),
    @OrderData datetime 
As
Begin
    Insert into OrderList (OrderId, OrderName, OrderDate)    
    values (@OrderId, @OrderName, @OrderData)
End

C#代码:

public HttpResponseMessage SaveCountry(OrderList cnt)
{
    OrderList Cntrcountr = new OrderList();
    Cntrcountr.OrderId = cnt.OrderId;
    Cntrcountr.OrderName = cnt.OrderName;
    Cntrcountr.OrderDate = cnt.OrderDate;

    var param = new SqlParameter("",Cntrcountr);
    var country = db.Database.SqlQuery<string>("Sp_OrderList", Cntrcountr);

    return Request.CreateResponse(HttpStatusCode.OK, country);
}

我收到错误

  

500内部服务器错误

请帮助我 - 我的错误是什么?

2 个答案:

答案 0 :(得分:1)

Database.SqlQuery将sql和then参数作为数组。您正在传递复杂对象,并期望将属性转换为参数。请参阅Database.SqlQuery documentation

public HttpResponseMessage SaveCountry(OrderList cnt)
{
    var country = db.Database.SqlQuery<string>("exec Sp_OrderList @OrderId, @OrderName, @OrderData", cnt.OrderId, cnt.OrderName, cnt.OrderDate);

    return Request.CreateResponse(HttpStatusCode.OK, country);
}

那说500状态的原因是因为您的服务器代码遇到了未处理的异常。您应该添加日志记录或了解如何调试服务器端代码,以便在发生异常时检查它。

答案 1 :(得分:1)

由于您的存储过程实际上并未返回任何数据,因此您应使用ExecuteSqlCommand方法。试试这个:

db.Database.ExecuteSqlCommand(
    "EXEC Sp_OrderList @OrderId, @OrderName, @OrderData",
    new SqlParameter("@OrderId", cnt.OrderId),
    new SqlParameter("@OrderName", cnt.OrderName), 
    new SqlParameter("@OrderData", cnt.OrderData));