2016-02-28 135 views
1

我想從我的C#代碼執行SQL Server存儲過程。下面是我使用的代碼:無法執行我的SQL Server存儲過程使用db.Database.SqlQuery(sql)

var sql = @"test"; 

try 
{ 
    var query = db.Database.SqlQuery(sql); 
    return Ok(); 
} 
catch (Exception ex) 
{ 
    return BadRequest(ex.Message); 
} 

這裏的存儲過程:

CREATE PROCEDURE [dbo].[test] 
AS 
BEGIN 
BEGIN TRY 
    BEGIN TRANSACTION; 
    PRINT 'INSERT 1 START'; 
    INSERT INTO Message (Text, TypeId) VALUES ('Message 5', 0); 
    THROW 50002,'thrown',1; 
    PRINT 'INSERT 2 START'; 
    INSERT INTO Message (Text, TypeId) VALUES ('Message 6', 0); 
    PRINT 'GOT HERE'; 
    COMMIT TRANSACTION; 
    RETURN; 
END TRY 
BEGIN CATCH 
     ROLLBACK TRANSACTION; 
     RETURN; 
END CATCH 

END 

我得到一個消息,說:

嚴重性代碼說明項目文件的線路抑制狀態 錯誤CS0411方法 'Database.SqlQuery(string,params object [])'的類型參數不能根據用法推斷爲 。嘗試明確指定類型參數 。 WebRole C:\^h \服務器\ WebRole \控制器\ WEB API - 數據\ MessageController.cs 28主動

誰能告訴我什麼,我做錯了。此外,這只是一個測試,但我希望能夠提交或回滾事務。在C#端需要做些什麼來使其成爲可能?

+0

嘗試'dbo.test'。 –

+0

與dbo.test相同的消息。該消息是指SqlQuery參數 – Alan2

+0

嘗試「執行測試」 –

回答

4

嘗試使用ExecuteSqlCommand方法,如下圖所示:

db.Database.ExecuteSqlCommand("exec dbo.test");