如果我想做类似的事情:
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,我该怎么办?
答案 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