存储过程返回布尔值以及C#相关处理

前段时间有在数据库以及程序之间使用到布尔(bool,Boolean)值的问题。

比如在SQL中,你想判断记录是否存? 通常你会这样写:

DECLARE @IsExists BIT = 0

IF EXISTS(SELECT TOP 1 1  FROM [dbo].[SixSResponsiblePerson] WHERE [SixS_nbr] = @SixS_nbr AND [UsersId] = @UsersId)
    SET @IsExists = 1

SELECT @IsExists

或者你可以按照Insus.NET的习惯写法:

SELECT CASE WHEN EXISTS(SELECT TOP 1 1 FROM [dbo].[SixSResponsiblePerson] WHERE
[SixS_nbr] = @SixS_nbr AND [UsersId] = @UsersId )
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END

在数据库返回值来看,存储过程只返回数据类型bit了,“1” 和“0”。现在我们在C#程序中应用这个存储过程:

其实,在C#中,数据转换为bool值时,只有"0"转换为false,其它值转换为true。

上面的情况一般均没有什么问题,

再看看,数据库的设计:

这个字段可以允许为空,也就意味着有三个值存储,true,false,null

此时我们在写存储过程时,就需要注意了。我们只需判断NULL空或0值为false的就行了,其它判断为真。

Ok,上面的存储过程,还适合另外一种情形,如使用tinyint。

时间: 2024-10-11 15:04:11

存储过程返回布尔值以及C#相关处理的相关文章

Mybatis 3 返回布尔值,需要注意的地方

在Mybatis中,有时候需要返回布尔值 ,来确定某个记录行是否存在. 例如: <select id="isExistCode" parameterType="string" resultType="boolean"> <![CDATA[ select count(id) from table where code=#{code} ]]> </select> 说明: Mybatis是根据查询到的记录数进行转换的

SpringMVC下Ajax请求的方法,@Responsebody如果返回的是布尔值,ajax不会接到任何回传数据

SpringMVC框架下,如果用ajax向后台请求得方法如果使用@Responsebody返回布尔值的话,ajax得不到任何的回传数据. 但是如果返回String类型,就是正常的. 测试了下代码写得没有任何问题,也不报错.只是在地址栏直接输入ajax请求的url会报404. The resource identified by this request is only capable of generating responses with characteristics not accepta

Java调用存储过程返回数组

Java调用存储过程: 结合SQL操作与存储过程 create procedure set_death_age(poet VARCHAR2, poet_age NUMBER) poet_id NUMBER; begin SELECT id INTO poet_id FROM poets WHERE name = poet; INSERT INTO deaths (mort_id, age) VALUES (poet_id, poet_age); end set_death_age; 下面是调用上

python基础数据类型----整数 ,字符串【常用操作方法】,布尔值,for循环

Python基础数据类型(4.29) bool str int 三者之间的转换 str索引切片,常用操作方法 for循环(大量的练习题) 1.基础数类型总览 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). 10203 123 3340 int 主要用于计算+- * / 等等 '今天吃了没?' str 存储少量的数据,并进行相应的操作.str1 + str2, str *int , 索引,切片, 其他操作方法 Tru

布尔值与比较运算符&quot;==&quot;

$man = "男";$flag = $man == "男"; //双等号是比较运算符,返回布尔值,成立则返1赋给$flag 不成立返回0,0即为nullecho $flag ;echo "<br />" ;var_dump($flag);结果:1bool(true)$man = "男";$flag = $man == "男"; //双等号是比较运算符,返回布尔值,成立则返1赋给$flag 不成

《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集 (转)

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-6在查询中设置默认值 问题 你有这样一个用例,当查询返回null值时,给相应属性设置默认值.在我们示例中,当数据库中返回null值时,用‘0’作为YearsWorked属性的默认值. 解决方案 假设你有如图3-7所示的模型,你想通过模型查询employees.在数据库中,代表employees的表包含一可为空的YearsWorked列.该列映射到Employee实体中的YearsWork

C#获取存储过程返回值和输出参数值的方法

//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @b //GO SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()); conn.Open(); SqlCommand MyCom

SQL 存储过程返回值

1.  存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)  用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况  (1)假如通过查询分析器执行该存储过程,在显示栏中假如有影响的行数,则影响几行count就是几  (2)假如通过查询分析器执行该存储过程,在显示栏中假如显示'命令已成功完成.'则count = -1;在显示栏中假如有查询结果,则count = -1 总结:A.ExecuteNonQuery()该方法只返回影响的

获取存储过程返回值及代码中获取返回值

获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;BEGININSERT INTO [Order](o_buyerid )VALUES (@o_buyerid )SET @o_id = @@IDENTITYENDEND 存储过程中获得方法: D