System.InvalidCastException: Specified cast is not valid, Microsoft Visual Studio, C#

I am writing a program which runs a stored procedure to return the data, then output the content to a CSV file.   When running my stored procedure, I get all the values back.  However, when I run the program, it stops what iit's doing and gives me the following error:

************** Exception Text **************
System.InvalidCastException: Specified cast is not valid.


I took a look at the CSV file and it populated 23 out of the 57 lines before it gives me this error message.  After doing some testing, I took out the following line and it worked successfully:

Decimal decDiscount = (Decimal)rowA["Discount"];

Can someone please help me solve this issue? I'm not sure what i'm doing wrong with the "Discount" column of the Stored Procedure.  The "Total" column has no problems, but its only the "Discount" column.  Both columns are the same data type of "money".
this.spTableAdapter.Fill(this.twOLTPDDataSet.spSproc);
DataView data = new DataView(twOLTPDDataSet.spSproc);
 
//Begin each row cycle
foreach (DataRowView rowA in currMinorData)
{
    string strCustomer = (string)rowA["Customer"];
    string strName = (string)rowA["Name"];
 
    Decimal decTotal = (Decimal)rowA["Total"];
    string strTotal = decTotal.ToString();
 
    Decimal decDiscount = (Decimal)rowA["Discount"];
    string strDiscount = decDiscount.ToString();
 
    Write Comma Delimiter to the file
    CorporateSpending.WriteLine(strCustomer + "," + strName + "," + strTotal + "," + strDiscount);
 
}

Open in new window

IndianaTechAsked:
Who is Participating?
 
p_davisConnect With a Mentor Commented:
try the conversion
Convert.ToDecimal(rowA["Discount"]);
instead of the cast
0
 
TechTiger007Connect With a Mentor Commented:
If you have null values for Discount then the type casting will fail.
Check if the value is DBNull.value or null and then type cast it to Decimal using Convert.ToDecimal only if it is valid.
0
 
IndianaTechAuthor Commented:
@p_davis: I updated my code to reflect your change.
and I am getting a different error back this time:

************** Exception Text **************
System.InvalidCastException: Object cannot be cast from DBNull to other types.
   at System.DBNull.System.IConvertible.ToDecimal(IFormatProvider provider)
   at System.Convert.ToDecimal(Object value)
************** Exception Text **************

I looked at the results of the CSV file and it has 22 lines in the file.  I looked at Query Analyzer and the 23rd row doesn't have any Null values in it.  I'm not too sure why it would be telling me it cannot cast from DBNull to other types.
string strDiscount = Convert.ToDecimal(rowA["Discount"]).ToString();

Open in new window

0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

 
p_davisCommented:
add what Tech Suggested with the

if(rowA["Discount"] != DbNull.Value)
   strDiscount = Convert.ToDecimal(rowA["Discount"]).ToString();

wait why are you converting to decimal and then to string?

what about

String strDiscount = String.Format("{0}:c", rowA["Discount"]);
0
 
p_davisCommented:
sorry that would be...

String strDiscount = String.Format("{1:c}", rowA["Discount"]);
0
 
IndianaTechAuthor Commented:
@p_davis: Have a problem with the DbNull.Value.

When building it, i got an error that says:
"The name 'DbNull' doe snot exist in the current context."
0
 
p_davisCommented:
sorry

DBNull
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.