2013-09-01 27 views
-1

我有这样一个存储过程:从DATABSE读取错误的值,而使用SqlDataReader的

TBarcode    Paid Status  DelDate 
-------------------- ----- ----------- ----------------------- 
57173621345   1  0   NULL while i am checking this value using vb.net code like 

此:

Dim dr As SqlDataReader 
Dim payd As Integer 
dr = cmdcarvalidation.ExecuteReader While dr.Read 
If dr("Paid") Is DBNull.Value Then payd = 0 Else 
payd = dr("Paid") If payd = 1 Then MsgBox("Payment Done") Exit Sub End If End If End While 

ALTER procedure [dbo].[carcallvalidation] 
@carid nvarchar(100)=null 
as begin SET NOCOUNT ON; select t.TBarcode, t.Paid,t.Status,t.DelDate from Transaction_tbl t where [email protected] declare @transid integer=null 
select @transid= t1.transactID from Transaction_tbl t1 where [email protected] 
if(select count(k.transactid) from KHanger_tbl k where [email protected])>0 
begin 
return 1 end end 
在执行这个我走出把这样

但payd值取-1 ...但在数据库中我得到这个值为1.then我如何得到-1值..

+0

首先,我想请从奇妙的代码显示了一些优势自动更正VS并编写代码,因为VB.NET期望写入条件(每行一条语句)。关于你的问题,似乎你错误地使用了DBNull.Value,据推测,“Paid”列是整数类型,其“空白记录值”不为空(但为-1)。这可能是你看到的行为的原因。无论如何,它必须处理你的数据库和值存储​​在那里的方式。如果连接字符串是正确的,SQLDataReader只是传递那里的内容。 – varocarbas

+0

所以我必须改变.. ?? – user2674855

+0

如果(不完全确定)我的假设是正确的,请将“DBNull.Value”替换为“= -1”。 – varocarbas

回答

0
所支付DATABSE数据类型

是位,,所以在代码中,我们应该检查值为True假,,不为0或1

+1

恐怕这不是一个解决方案(一般适用对某人有用)。这只是确认你没有正确分析信息(既不在此处发布)。如果你想把这个问题/答案作为正确的答案(对所有人都有用),你应该重写这两个部分(答案和问题)以突出你发现的问题(获得-1s),证明没有用的东西(依靠空),什么是最后的问题(值存储为位/布尔值......不知道这个答案仍然存在)以及你如何解决它。如果你不想这样做,也许应该删除这个Q/A。 – varocarbas