如何将 SQL Server 中的 SELECT 查询结果的布尔值转化为 C# 中的 bool 类型?
如何将 SQL Server 中的 SELECT 查询结果的布尔值转化为 C# 中的 bool 类型?
我在SELECT语句中有以下代码:\n
SELECT A.CompletedDate, CASE WHEN (@AdminTestId IS NULL AND @UserTestId IS NULL) THEN 0 WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId = A.UserTestId) THEN 1 WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId IS NULL) THEN 1 ELSE 0 END AS [Current],
\n在我的ASP.NET DTO中有:\n
public partial class GetTestsDTO { public bool? GradePass { get; set; } // 下面这行代码导致了错误。如果我移除这行代码,它将不会尝试转换数据,也不会出现错误。请注意,我想将其放入一个bool类型中,然后web.api将它作为bool类型传递给客户端 public bool Current { get; set; } public DateTime? CompletedDate { get; set; } }
\n它给我报错了,我希望得到一些帮助。\n错误信息为:\n
\nmessage=指定从实例化的\'System.Int32\'类型到\'System.Boolean\'类型的转换是无效的。\n
问题的原因是SQL Server不能直接返回布尔值,而且在给定的代码中也没有返回布尔值。解决方法是将整数值从SQL查询中获取到C#对象中,然后使用一个'映射'函数将整数转换为布尔值。
解决方法1是创建一个简单的方法,将整数转换为布尔值。方法如下:
public static boolean integerToBoolean(Integer myInt){
return myInt == 1 ? true : false;
}
解决方法2是使用Convert.ToBoolean(Int32)方法。可以通过Convert.ToBoolean(Int32)方法将整数转换为布尔值。
祝好运!
问题的原因是在SQL Server中,返回的是一个整数类型,而在C#中需要的是布尔类型。解决方法有以下几种:
1. 在SQL查询中使用CONVERT(bit, 0)
和CONVERT(bit, 1)
来将整数转换为布尔类型。
2. 可以将整个CASE
语句包裹在CONVERT
函数中,如CONVERT(bit, CASE ... END)
。
3. 可以使用CAST(1 AS bit)
和CAST(0 AS bit)
来代替CONVERT(bit, 1)
和CONVERT(bit, 0)
。这样做的好处是代码更简洁。
另外,也可以在客户端进行类型转换,如在C#代码中使用Convert.ToBoolean
函数将整数转换为布尔类型。
最后,还可以将CONVERT
函数放在CASE
之外,这样就不需要在每个THEN
语句中都进行转换了。
以上就是解决这个问题的几种方法。
问题的原因是在SQL Server中,查询结果返回的布尔值需要在C#中以bool类型接收,但是在SQL Server中没有直接返回布尔值的数据类型。解决方法是将查询结果中的0和1转换为BIT数据类型,然后在C#中使用bool类型接收。
在SQL Server中,可以通过使用CASE语句将0和1转换为BIT数据类型。下面是一个示例:
SELECT A.CompletedDate, CASE WHEN ( IS NULL AND IS NULL) THEN CAST(0 AS BIT) WHEN ( = temp.AdminTestId AND = A.UserTestId) THEN CAST(1 AS BIT) WHEN ( = temp.AdminTestId AND IS NULL) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END AS [Current]
或者可以将整个表达式一起转换为BIT数据类型:
SELECT A.CompletedDate, CAST((CASE WHEN ( IS NULL AND IS NULL) THEN 0 WHEN ( = temp.AdminTestId AND = A.UserTestId) THEN 1 WHEN ( = temp.AdminTestId AND IS NULL) THEN 1 ELSE 0 END) AS BIT) AS [Current]
在上述代码中,通过使用CAST函数将0和1转换为BIT数据类型,然后将结果命名为[Current]。
在C#中,可以使用bool类型来接收查询结果中的布尔值。此外,根据SQL Server数据类型映射,BIT数据类型在.NET Framework中对应的类型是Boolean,而在SqlDbType枚举中对应的类型是Bit。
要将SQL Server中的查询结果转换为C#中的bool类型,可以在SQL Server中使用CASE语句将0和1转换为BIT数据类型,然后在C#中使用bool类型来接收结果。