?
Solved

Question on output parameter in VB.NET program.

Posted on 2006-07-20
3
Medium Priority
?
208 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 400 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 1600 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
Suggested Courses

741 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