我正在使用实体框架,并尝试使用以下存储过程在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 内部服务器错误
请帮助我 - 我的错误是什么?
由于存储过程实际上不返回任何数据,因此应使用 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));
>Database.SqlQuery
将SQL和参数作为数组。您正在传入一个复杂的对象,并期望将属性转换为参数。请参阅 Database.SqlQuery 文档。
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 状态的原因是因为您的服务器代码遇到了未经处理的异常。应添加日志记录或了解如何调试服务器端代码,以便在异常发生时检查异常。