C# 如何将列指定为布尔类型

C# 如何将列指定为布尔类型,c#,sql,C#,Sql,如果我想做以下事情: select name, 0 as ischild from people 并将我刚刚动态创建的ischild列指定为bool列(供以后使用),我如何才能做到这一点?因为现在如果我从C#代码中读取这个结果集,它总是将0解释为int,如果我使用GetBoolean,就会出现错误 除此之外,如果我做进一步的事情,比如: select * from otherpeople left outer join (select *, cast(0 as bit) as ischild

如果我想做以下事情:

select name, 0 as ischild from people
并将我刚刚动态创建的ischild列指定为bool列(供以后使用),我如何才能做到这一点?因为现在如果我从C#代码中读取这个结果集,它总是将0解释为int,如果我使用GetBoolean,就会出现错误

除此之外,如果我做进一步的事情,比如:

select * from otherpeople left outer join 
(select *, cast(0 as bit) as ischild from People) q on otherpeople.id = q.id
现在ischild的某些行可能为空,对吗?如果我仍然想在该列上使用GetBoolean,我应该怎么做

select name, cast(0 as bit) as ischild from people
编辑

延伸问题

布尔有两种状态->真或假。然而,在数据库中可以有TRUE、FALSE或NULL

如果您想将NULL作为false,那么在内部查询中,而不是在内部查询中,我倾向于在外部查询

中进行转换。
select otherpeople.*, q.*, cast(ISNULL(q.isChild, 0) AS BIT) AS isChild 
from otherpeople left outer join 
(select *, 0 as ischild from People) q on otherpeople.id = q.id
如果您想将其作为外部联接的一部分包含,其中可能会获得null值,那么需要在GetBoolean之前检查null。您可以通过在列上调用IsDBNull来实现这一点

请参阅以获取示例

if (!reader.IsDBNull(reader.GetOrdinal("ischild")))
               Console.Write(" {0}", reader.GetBoolean(reader.GetOrdinal("ischild")));

这应该可以做到:

select name, CAST(0 AS BIT) as ischild from people

你能回答我进一步的问题吗。。很抱歉,我在第一版中没有提出这个问题。现在你提出的问题很好,也很棘手。因为bool只有两种状态,即true或false,而数据库也有NULL。现在有一个问题要问你,你想如何将这个空值解释为true或false,或者你想在C#中处理为DBNULL?我想这样false@thudbutt对不起,名字应该是*@Xufeng-我添加了一个处理空值的示例
select name, CAST(0 AS BIT) as ischild from people
select name, CAST(0 AS BIT) as ischild from people