C# 为什么存储过程中的数据不存储在数据库中?

C# 为什么存储过程中的数据不存储在数据库中?,c#,sql-server,entity-framework,stored-procedures,asp.net-web-api,C#,Sql Server,Entity Framework,Stored Procedures,Asp.net Web Api,我正在使用实体框架,并尝试使用以下存储过程在SQL Server中存储一些数据: create procedure [dbo].[Sp_OrderList] @OrderId int, @OrderName varchar(50), @OrderData datetime As Begin Insert into OrderList (OrderId, OrderName, OrderDate) values (@OrderId, @OrderN

我正在使用实体框架,并尝试使用以下存储过程在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存储国家/地区(订单列表cnt)
{
OrderList Cntrcountr=新订单列表();
Cntrcountr.OrderId=cnt.OrderId;
Cntrcountr.OrderName=cnt.OrderName;
Cntrcountr.OrderDate=cnt.OrderDate;
var param=新的SqlParameter(“,Cntrcountr);
var country=db.Database.SqlQuery(“Sp_OrderList”,Cntrcountr);
返回请求.CreateResponse(HttpStatusCode.OK,国家/地区);
}
我犯了个错误

500内部服务器错误


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

数据库。SqlQuery
将sql和参数作为数组。您正在传入一个复杂的对象,并希望将属性转换为参数。看

public HttpResponseMessage存储国家/地区(订单列表cnt)
{
var country=db.Database.SqlQuery(“exec Sp_OrderList@OrderId、@OrderName、@OrderData”、cnt.OrderId、cnt.OrderName、cnt.OrderDate);
返回请求.CreateResponse(HttpStatusCode.OK,国家/地区);
}

也就是说,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));

旁注:存储过程不应使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!你应该学会如何找出错误是什么。请参阅。在这里,我们没有提供任何列,那么当我超过上面的查询sql性能时,它的工作如何生成exec sp_executesql N'sp_OrderList',N'@p0 int,@p1 nvarchar(1),@p2 datetime',@p0=123,@p1=N'q',@p2='2015-01-01 00:00:00'错误,因为过程或函数'sp_OrderList'需要参数'@OrderId',未提供。获取错误作为附加信息:在“@OrderName”附近的语法不正确。
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);
}
db.Database.ExecuteSqlCommand(
    "EXEC Sp_OrderList @OrderId, @OrderName, @OrderData",
    new SqlParameter("@OrderId", cnt.OrderId),
    new SqlParameter("@OrderName", cnt.OrderName), 
    new SqlParameter("@OrderData", cnt.OrderData));