C# 如何使用ExecuteSqlCommand从SQL存储过程获取值列表

C# 如何使用ExecuteSqlCommand从SQL存储过程获取值列表,c#,sql,stored-procedures,C#,Sql,Stored Procedures,我尝试使用以下SQL存储过程,根据输入参数获取SQL表中的值列表作为输出 CREATE PROCEDURE GetFirstNames @LastName nvarchar(128), @FirstNames nvarchar(128) OUTPUT AS SET @FirstNames = (SELECT FirstName FROM NamesTable WHERE LastName = @LastName) GO 我使用下面的代码从表中获取名字列表 SqlParamete

我尝试使用以下SQL存储过程,根据输入参数获取SQL表中的值列表作为输出

CREATE PROCEDURE GetFirstNames
  @LastName nvarchar(128),
  @FirstNames nvarchar(128) OUTPUT
  AS
  SET @FirstNames = (SELECT FirstName FROM NamesTable WHERE LastName = @LastName)
GO
我使用下面的代码从表中获取名字列表

SqlParameter lastNameParam = new SqlParameter("@LastName", "Smith");
SqlParameter firstNamesParameter = new SqlParameter("@FirstNames", SqlDbType.NVarChar, 128);
firstNamesParameter.Direction = ParameterDirection.Output;
string sql = String.Format("EXEC dbo.GetFirstNames {0}, {1};",
    lastNameParam.ParameterName,
    firstNamesParameter.ParameterName);
context.Database.ExecuteSqlCommand(sql, lastNameParam, firstNamesParameter);
调用ExecuteSqlCommand方法时,出现以下错误:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
如何解决查询错误,以便获得名字列表? 如何返回此列表并在c代码中使用它? 如果有人能帮我,我将不胜感激。 谢谢

将修复查询部分并提供可枚举的结果集。剩下的是OP的练习


将修复查询部分并提供可枚举的结果集。其余部分是OP的练习。

是否确定从NamesTable中选择FirstName,其中LastName=@LastName仅返回1个FirstName?它不返回任何值,我收到一个异常,并显示给定的错误消息。该表有更多的值,通过在SSMS中运行相同的查询,我可以看到多个值。请在查询窗口中运行查询。确认它只返回1个FirstName,无论您对@LastName使用什么参数。例如,如果您要为参数值传递Smith,那么从NamesTable中选择FirstName(其中LastName='Smith'返回)是什么?它可能返回超过1行,这就是异常的原因。@ElliotRodriguez的意思是该错误可能与您的c应用程序无关。名称表中必须有多行LastName=Smith,为什么要设置?您需要的只是选择-然后让C处理返回的名称表您确定从名称表中选择FirstName,其中LastName=@LastName只返回1个FirstName吗?它不返回任何值,我得到一个异常,并显示给定的错误消息。该表有更多的值,通过在SSMS中运行相同的查询,我可以看到多个值。请在查询窗口中运行查询。确认它只返回1个FirstName,无论您对@LastName使用什么参数。例如,如果您要为参数值传递Smith,那么从NamesTable中选择FirstName(其中LastName='Smith'返回)是什么?它可能返回超过1行,这就是异常的原因。@ElliotRodriguez的意思是该错误可能与您的c应用程序无关。名称表中必须有多行LastName=Smith,为什么要设置?您需要的只是选择,然后用C处理返回的名称表Thank@Elliot。我看到在SSMS中返回的所有值。您能告诉我如何在我的c代码上下文中访问此文件吗?Database.ExecuteSqlCommandsql,lastNameParam,FirstNameParameter;?我在输出参数中没有看到任何值。我将查询更改为从名称表中选择@FirstName=FirstName,其中LastName=@LastName。现在我只看到第一个值。我可以获取所有值吗?@mtcup如果要获取结果集,您不需要ExecuteSqlCommand。演示如何运行SP并在以后使用读卡器。请欣赏。如果你想用一种简单的方法返回对象,你可以看看我写的这个150行的框架——谢谢@Elliot。我看到在SSMS中返回的所有值。您能告诉我如何在我的c代码上下文中访问此文件吗?Database.ExecuteSqlCommandsql,lastNameParam,FirstNameParameter;?我在输出参数中没有看到任何值。我将查询更改为从名称表中选择@FirstName=FirstName,其中LastName=@LastName。现在我只看到第一个值。我可以获取所有值吗?@mtcup如果要获取结果集,您不需要ExecuteSqlCommand。演示如何运行SP并在以后使用读卡器。请欣赏。如果你想要一个简单的返回对象的方法,你可以看看我写的这个150行的框架-
CREATE PROCEDURE GetFirstNames
  @LastName nvarchar(128)
  AS
SET NOCOUNT ON
SELECT FirstName FROM NamesTable WHERE LastName = @LastName
GO