如何将列指定为bool类型

时间:2014-02-27 20:19:59

标签: 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 from People) q on otherpeople.id = q.id

现在ischild的某些行可能是空的吗?如果我还想在该列上使用GetBoolean,我该怎么办?

4 个答案:

答案 0 :(得分:4)

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

修改

对于扩展问题

Bool有两个州 - >对或错。但是在数据库中,您可以使用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

答案 1 :(得分:3)

SELECT name, CAST(0 AS BIT) AS ischild FROM people

如果要将此作为外部联接的一部分包含在可能获得空值的位置,则需要在GetBoolean之前检查空值。您可以通过在列上调用IsDBNull来完成此操作。

请参阅http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull(v=vs.110).aspx以获取示例

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

这应该可以解决问题:

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