Vit*_*liy 1 c# sql sql-server stored-procedures sqldatareader
我有3个表:users,feed(id,body,title,link)和userstofeed(id,userid,feedid,isread)而我试图读取userstofeed表布尔值,它带来的IndexOutOfRangeException.请告诉我,我做错了什么
while (reader.Read())
{
rssFeed.Title = reader["title"].ToString();
rssFeed.Body = reader["body"].ToString();
rssFeed.Link = reader["link"].ToString();
rssFeed.IsRead = (bool) reader["isread"]; //IndexOutOfRangeException here
yield return rssFeed;
}
Run Code Online (Sandbox Code Playgroud)
这里是sql store程序:
create proc spGetItemsByUser
@userName nvarchar(50)
as
begin
declare @userId int
declare @feedId table (id int)
select @userId = id
from Users
where name = @userName
insert into @feedid (id)
select feedid, isread
from userstofeed
where userid = @userId
select * from feed where id in (select id from @feedId)
select isread from userstofeed where userid = @userId //Here I'm getting bit if it read or not
end
Run Code Online (Sandbox Code Playgroud)
SELECT将存储过程中的s 更改为:
SELECT [feed].[title], [feed].[body], [feed].[link], [userstofeed].[isread]
FROM [feed]
INNER JOIN [userstofeed] ON ([userstofeed].userid = @userId)
WHERE [feed].[id] in (select id from @feedId)
Run Code Online (Sandbox Code Playgroud)
我认为在您的版本isread中不是第一个结果集的列.这些isread值作为行后面的行附加title,feed和body.
正如Zohar Peled建议的那样,我尝试对整个存储过程进行重构:
CREATE PROC spGetItemsByUser
@userName nvarchar(50)
AS
BEGIN
SELECT [feed].[title], [feed].[body], [feed].[link], [userstofeed].[isread]
FROM [feed]
INNER JOIN [userstofeed] ON ([userstofeed].[feedid] = [feed].[id])
INNER JOIN [users] ON ([users].[id] = [userstofeed].[userid])
WHERE [users].[name] = @userName
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |