[英]Stored Procedure with Datatable as param returns nothing
我已經建立了一個存儲過程,該過程將數據表傳遞到實體框架中並直接從中調用。
我用以下sql創建了一個Type:
CREATE TYPE Regions AS TABLE
( RegionId int,
Region varchar(max),
BodyId int NULL,
Body varchar(max),
AreaId int NULL,
Area varchar(max),
Location varchar(max),
LocationId int
)
我的測試存儲過程如下:
CREATE PROCEDURE [dbo].[GetStats]
@regions dbo.Regions READONLY
AS
BEGIN
SELECT * INTO #tmptble from @regions
Select * from #tmptble
END
我正在使用以下方法來調用存儲過程:
SqlParameter param = new SqlParameter();
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.Regions";
param.Value = myDataTable;
param.ParameterName = "@regions";
return _context.Database.SqlQuery<RegionDetails>("GetStats", param);
我的數據表絕對是正確的格式,因為我已經通過探查器將其傳遞到存儲過程中,並且可以看到所有插入物出現了。 如果我從所有插入語句生成測試表,則該過程可以正常運行,但是當我使用傳入的數據表運行該表時,它僅不返回任何行。
編輯-有關更多信息,當我通過探查器運行此程序時,將得到以下信息:
declare @p3 dbo.Regions
~~~a Load of insert statements of all my datatable data~~~
exec sp_executesql N'GetStats',N'@regions [dbo].[Regions] READONLY',@regions =@p3
上面的更新我一直在分析探查器中顯示的內容,如果我替換
exec sp_executesql N'GetStats',N'@ regions [dbo]。[地區] READONLY',@ regions = @ p3
與
EXEC GetStats @ p3
再次有效。 有人知道為什么嗎?
試試這個方法:
//create parameter
var param = new SqlParameter("@regions", SqlDbType.Structured);
param.Value = myDataTable;
param.TypeName = "dbo.Regions";
//return result set
return _context.ExecuteFunction<RegionDetails>("dbo.Regions", param);
//OR
//execute stored procedure for inserts, returns rows effective
return _context.Database.ExecuteSqlCommand("exec dbo.Regions @regions", param);
答案基於@SteveD的答案,但要弄清楚我所做的一切,以防其他人幫忙。 我的存儲過程沒有任何問題。 純粹是我的要求。 它需要在實際調用中使用參數名稱,如下所示:
SqlParameter param = new SqlParameter();
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.Regions";
param.Value = myDataTable;
param.ParameterName = "@regions";
return _context.Database.SqlQuery<RegionDetails>("GetStats @regions", param);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.