我想返回包含来自同一用户的值的多行。我创建了一个返回3个输出的存储过程。存储过程返回多个行到ASP.NET MVC应用程序
我需要检索所有行的值,而不仅仅是第一个。
我回来的是名字和地点。
存储过程:
ALTER PROCEDURE [dbo].[GetCountries]
@UserID int,
@Name nvarchar(10) output,
@Latitude float output,
@Longitude float output
AS
BEGIN
SET NOCOUNT ON;
SET @Nombre = (SELECT p.Name
FROM Places AS p
INNER JOIN Places_Details AS pd ON p.Name = pd.Name
WHERE p.Id_User = @UserID)
SET @Latitude = (SELECT pd.Latitude
FROM Places AS p
INNER JOIN Places_Details AS pd ON p.Name = pd.Name
WHERE p.Id_User = @UserID)
--set @Longitude = (SELECT pd.Longitude
-- FROM Places as p INNER JOIN Places_Details as pd ON p.Name = pd.Name WHERE p.Id_User = @UserID)
SELECT @Name, @Latitude, @Longitude
END
而在ASP.NET MVC:
public List<PlacesModel> getMyPlaces()
{
PlacesList = new List<PlacesModel>();
try
{
using (SqlConnection sqlConnection = DbConnection.OpenConnection())
{
using (SqlCommand sqlCommand = new SqlCommand("GetCountries", sqlConnection))
{
sqlCommand.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(sqlCommand);
sqlCommand.Parameters["@UserID"].Value = 415;//UserRepository.getInstance().getUserId();
sqlCommand.Parameters["@Name"].Value = "";
sqlCommand.Parameters["@Latitude"].Value = 415;
sqlCommand.Parameters["@Longitude"].Value = 415;
sqlCommand.ExecuteNonQuery();
string name = (string) sqlCommand.Parameters["@Nombre"].Value;
double lat= (double)sqlCommand.Parameters["@Latitude"].Value;
double lon = (double)sqlCommand.Parameters["@Longitude"].Value;
if(!name.Equals("") & lat > 0 && long> 0)
{
PlacesModel placesm = new LugaresModel();
placesm.Place = name;
placesm.Latitude = Convert.ToString(lat);
placesm.Longitude = Convert.ToString(lon);
PlacesList.Add(placesm);
}
}
sqlConnection.Close();
}
}
catch (Exception e)
{
e.GetBaseException();
}
return PlacesList;
}
}
我得到这个错误:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
任何解决方案?谢谢
您'SELECT'子句返回多个记录 –
根据错误消息,似乎存储过程中的一个查询返回多个行/记录。如果你只希望从'select'查询中得到一行,或者只需要第一行,你可以通过在你的'select'语句中加入'TOP 1'来实现。 – fujiFX
我需要检索所有的倍数行,而不仅仅是第一个。 – Azrael94