gpt4 book ai didi

c# - IndexOutOfRangeException SqlDataReader 从表中读取 bool 值

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:58 25 4
gpt4 key购买 nike

我有 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

关于c# - IndexOutOfRangeException SqlDataReader 从表中读取 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36175489/

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