首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有TVP参数的ExecuteStoreQuery

带有TVP参数的ExecuteStoreQuery
EN

Stack Overflow用户
提问于 2011-05-12 22:37:53
回答 1查看 7.1K关注 0票数 5

我的数据库中有一个存储过程,它接受一个表值参数,即一个包含单个整数Id列的IdTable对象列表。

我有一个数据库的实体模型,并希望执行以下操作...

代码语言:javascript
复制
ProjectEntities projectEntities = new ProjectEntities ();

DataTable stationIds = new DataTable();
stationIds.Columns.Add("Id");
stationIds.Rows.Add(1);
stationIds.Rows.Add(2);

SqlParameter parameter = new SqlParameter("@stationIds",stationIds);
parameter.TypeName = "IdTable";

var parameters = new object[] {parameter};

var results = projectEntities .ExecuteStoreQuery<ProjectSummary>("exec ProjectSummary", parameters);

var count = results.Count();

当它应该返回一堆ProjectSummary实体时,它运行时不返回任何结果。

当我在SQL事件探查器中对其进行性能分析时,我得到以下信息

代码语言:javascript
复制
declare @p3 IdTable
insert into @p3 values(N'1')
insert into @p3 values(N'2')

exec sp_executesql N'exec ProjectSummary',N'@stationIds [IdTable] READONLY',@stationIds=@p3

如果我将存储过程声明为

代码语言:javascript
复制
ALTER PROCEDURE [dbo].[ProjectSummary]
    @stationIds  [dbo].[IdTable] READONLY
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
SELECT * FROM @stationIds
...

然后我得到的不是结果,看起来TVP参数是空的。

就像我手动执行

代码语言:javascript
复制
declare @p3 IdTable
insert into @p3 values(N'1')
insert into @p3 values(N'2')

EXEC    [ProjectSummary]
        @stationIds = @p3

GO

我得到了SELECT查询返回的值1和2。

因此,当我运行ExecuteStoreCommand时,看起来我想使用EXEC而不是SP_EXECUTESQL。给出上面的代码示例,我到底该如何做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-13 21:09:45

事实证明ExecuteStoreQuery调用是不正确的,应该是

代码语言:javascript
复制
SqlParameter stations = new SqlParameter { ParameterName = "p0", Value = ids, TypeName = "[dbo].[IdTable]", SqlDbType = SqlDbType.Structured };

var parameters = new object[] { stations };

var results = projectEntities.ExecuteStoreQuery<ProjectSummary>("exec ProjectSummary @p0", parameters);

因此,我需要命名参数并将@p0添加到exec命令中。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5979706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档