gpt4 book ai didi

sql-server - sp_executesql - 过程或函数需要未提供的参数

转载 作者:行者123 更新时间:2023-12-03 01:42:07 27 4
gpt4 key购买 nike

我正在使用 C# 中的 Entity Framework ,并且遇到了一个问题,我已追踪到生成的 SQL 语句。

存储过程接受表值参数,但这似乎不是问题。

在 SQL Profiler 中,我看到正在执行以下内容:

declare @p3 dbo.PositiveTypes
insert into @p3 values(N'1')
insert into @p3 values(N'4')
insert into @p3 values(N'6')

exec sp_executesql N'dbo.SaveResults',
N'@resultID int, @positiveResults [PositiveTypes] READONLY',
@resultID=1,
@positiveResults=@p3

这会导致:

Msg 201, Level 16, State 4, Procedure SaveResults, Line 0
Procedure or function 'SaveResults' expects parameter '@resultID', which was not supplied.

这个过程的定义是:

ALTER PROCEDURE [dbo].[SaveResults] 
@resultID int,
@positiveResults AS dbo.PositiveTypes READONLY

用户定义的类型是:

CREATE TYPE [dbo].[PositiveTypes] AS TABLE(
[TypeID] [tinyint] NULL
)

这个sp_executesql语法有什么问题?为什么它认为 @resultID 没有在这里正确传递?

最佳答案

我也遇到了同样的问题。

声明命令后,您必须指定命令类型

SqlCommand cmd = new SqlCommand(@"sp_name", con);

cmd.CommandType = CommandType.StoredProcedure;

如果您不这样做,.NET 将生成一个使用 sp_executesql... 的命令,而问题是 ... 您指定了该命令如上所述输入,生成的代码使用

execute storedprocedure @param1 = ...

关于sql-server - sp_executesql - 过程或函数需要未提供的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26003520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com