簡體   English   中英

IndexOutOfRangeException SqlDataReader從表中讀取布爾值

[英]IndexOutOfRangeException SqlDataReader reading bool value from table

我有3個表: usersfeed(id,body,title,link)userstofeed(id,userid,feedid,isread)而我試圖從userstofeed表中讀取bool值時,它帶來了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;
}

而這里的SQL存儲過程:

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

將存儲過程中的SELECT更改為此:

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)

我認為在您的版本中isread不是第一個結果集的列。 isread值將作為titlefeedbody行的后面追加。


正如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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM