0

내가 엔티티 프레임 워크를 사용하고 있는데 나는이 저장 프로 시저를 사용하여 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 내부 서버 오류

제발 도와주세요 - 내 실수는 뭐니?

+1

사이드 노트 : 저장 프로 시저에'sp_' 접두사를 사용하지 말아야합니다 **. Microsoft는 [자체 저장을 위해이 접두어를 예약했습니다 (* 저장 프로 시저 명명 * 참조)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) 및 당신은 미래에 언젠가 이름 충돌의 위험을 감수해야합니다. [저장 프로 시저 성능에 좋지 않습니다.] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). 'sp_'를 피하고 다른 것을 접두어로 사용하는 것이 가장 좋습니다. –

+0

오류의 원인을 파악하는 방법을 배워야합니다. [이 질문] (http://stackoverflow.com/questions/28768715/application-error-in-global-asax-not-catching-errors-in-webapi/28769915#28769915)을 참조하십시오. – mason

답변

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)); 
+0

추가 정보로 오류가 발생했습니다 : '@OrderName'근처의 구문이 잘못되었습니다. – Hussain

+0

감사합니다. – Hussain

1

Database.SqlQuery은 sql과 매개 변수를 배열로 취합니다. 복잡한 객체를 전달하고 속성이 매개 변수로 변환 될 것으로 기대합니다. 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 개 상태에 대한 이유는 말했다. 로깅을 추가하거나 서버 사이드 코드를 디버그하여 예외가 발생했을 때이를 검사 할 수있는 방법을 배워야합니다.

+0

여기 우리는 어떤 열도 공급하지 않습니다. 어떻게하면 쿼리 SQL 쿼리보다 위에 exceute 할 수 있습니다. 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 '를 필요로합니다. – Hussain

+0

감사합니다. – Hussain