Solved

Question on output parameter in VB.NET program.

Posted on 2006-07-20
3
196 Views
Last Modified: 2008-02-26
I have a stored proc:
CREATE proc usp_Test1    
@wo_num varchar(6),    
@emp_cd varchar(6) out,    
@status_message varchar(20) out    
as    
set @status_message = 'Print something'    
select @status_message, @emp_cd  
return    

When I run this stored proc: exec usp_Test1    '100000', 'aaa', 'bbb'
It has no error and will print: 'Print something'   'aaa'

But when I used in my vb.net program:
emp_cd = objCmd.Parameters("@emp_cd").Value
it will have an exception that shows:
"Cast from type 'DBNull' to type 'String' is not valid."

It's obviously because that output parameter was not assisgned a value.
1. But my question is, why it was null instead of getting the value from the parameter list in exec usp_Test1    '100000', 'aaa', 'bbb', i.e. got a value of 'aaa'?
2. My solution to the above problem was added one more initilization line:
set @emp_cd = ''  
Is there any better way or standard way of doing this? Thanks a lot.
0
Comment
Question by:heyday2004
  • 2
3 Comments
 
LVL 24

Expert Comment

by:Justin_W
ID: 17150761
I assume you have declared emp_cd as a String. If there is any possiblility that it can return NULL, you need to declare it as type Object, and only cast it to string if (DBNull.Value.Equals(emp_cd)) is false.
0
 
LVL 24

Assisted Solution

by:Justin_W
Justin_W earned 100 total points
ID: 17150764
FYI: This is because DBNull and Nothing/null are not the same thing in .NET.
0
 
LVL 24

Accepted Solution

by:
Jeff Certain earned 400 total points
ID: 17151541
For some reason, Microsoft has created an object called System.DBNull which represents an empty field. What's really baffling is that they made this object not cast to anything else (i.e. not string, integer, double)

The easiest way to deal with this is to rewrite your stored procedure to return something other than a NULL:
select @status_message, ISNULL(@emp_cd  ,'')
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
1.0 - Introduction Converting Visual Basic 6.0 (VB6) to Visual Basic 2008+ (VB.NET). If ever there was a subject full of murkiness and bad decisions, it is this one!   The first problem seems to be that people considering this task of converting…
Delivering innovative fully-managed cloud services for mission-critical applications requires expertise in multiple areas plus vision and commitment. Meet a few of the people behind the quality services of Concerto.
A company’s greatest vulnerability is their email. CEO fraud, ransomware and spear phishing attacks are the no1 threat to a company’s security. Cybercrime is responsible for the largest loss of money to companies today with losses projected to r…

948 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now