2013-03-30 46 views
1

我的存储过程:检索输出参数从存储过程OLEDB命令vb.net

PROCEDURE [dbo].[addMasterTransaksi] 

@kodeSuplier varchar(10), 
@Total money, 
@kodeUser varchar(10), 
@isLunas varchar (2), 
@Dp money, 
@kodeTrans varchar(10) output 
AS 
BEGIN 
Declare @KdTrans as varchar(10); 
Declare @Kode as int; 
Declare @thisYear as varchar(10); 

select @thisyear = RIGHT(YEAR(getDate()),2) 

SELECT TOP(1) @KdTrans = SUBSTRING(kodeTransaksi,5,6) FROM TblMasterPembelian WHERE YEAR(Tanggal) = YEAR(getDate()) order by kodeTransaksi desc; 
--print @KdTrans 
IF @KdTrans IS Null 
    SET @KdTrans = 'TB'+ @thisYear +'000001' 
else 
    begin 
    select @Kode = convert(int,@KdTrans); 
    select @Kode = @Kode + 1; 
    select @KdTrans = convert(int,@Kode); 
    select @KdTrans = '00000' + @KdTrans; 
    select @KdTrans = right(@KdTrans,6) 
    select @KdTrans ='TB' + @thisYear + @KdTrans 
    end 

SET NOCOUNT ON; 

--ke Master Pembelian 
INSERT INTO TblMasterPembelian(kodeTransaksi,Tanggal,Total,kodeSuplier,kodeUser,isLunas,DP) 
VALUES (@KdTrans,getDate(),@Total,@kodeSuplier,@kodeUser,@isLunas,@Dp) 

set @kodeTrans [email protected] 
--print @kodeTrans 
return @kodetrans 

END 

VB.NET代码:

Public Function addMasterPembelianny(ByVal kodesup As String, ByVal total As Long, ByVal kodeUser As String, ByVal isLunas As String, ByVal dp As Long) 
    Dim kodeTransaksi As String 



    modKoneksi.bukaKoneksi() 
    command.Connection = modKoneksi.koneksidb 
    command.CommandType = CommandType.StoredProcedure 
    command.CommandText = "addMasterTransaksi" 
    command.Parameters.Add("@kodeSuplier", OleDbType.VarChar, 10, ParameterDirection.Input).Value = kodesup 
    command.Parameters.Add("@Total", OleDbType.BigInt, 10, ParameterDirection.Input).Value = total 
    command.Parameters.Add("@kodeUser", OleDbType.VarChar, 10, ParameterDirection.Input).Value = kodeUser 
    command.Parameters.Add("@isLunas", OleDbType.VarChar, 2, ParameterDirection.Input).Value = isLunas 
    command.Parameters.Add("@Dp", OleDbType.BigInt, 10, ParameterDirection.Input).Value = dp 

    command.Parameters.Add("@kodeTrans", OleDbType.Char, 10) 
    command.Parameters("@kodeTrans").Direction = ParameterDirection.Output 


    command.ExecuteReader() 


    kodeTransaksi = command.Parameters("@kodeTrans").Value 
    modKoneksi.tutupKoneksi() 
    Return kodeTransaksi 

End Function 

我有问题时,我想从一个存储检索参数过程..

当运行该代码,出现这样的消息的错误..

Conversion failed when converting the varchar value 'TB13000005' to data type int.

他们为什么说失败转换为数据类型int ??

我的代码有什么问题..?

高手帮我请..

回答

2

我相信它是这条线在你的存储过程,而导致错误:

return @kodetrans 

存储过程只能返回整数作为RETURN声明的一部分,所以该行失败(因为@kodetransVARCHAR)。您只需删除该行完全......对于输出参数,你在这里做:

set @kodeTrans [email protected] 

在存储过程是好的,应该充分/ OK。

+0

非常感谢nkvu .. 我的问题解决了.. 我以前不知道“返回”只返回整数.. 谢谢。 –