I keep geting the exception:
System.InvalidCastException: Specified cast is not valid.
I get this when I try to pass a DataRow into an object method. The line that
causes this error is:
policy.SetValues(dr);
Here is part of the class that contains the method that I want to call:
using System;
using System.Data;
using System.Collections;
namespace IDUL.Policies
{
/// <summary>
/// </summary>
public class Policy
{
private int _qid;
private int _cid;
private string _policy_number;
private string _inception_date;
private string _expiry_date;
private float _raw_premium;
private float _policy_fee;
private float _admin_fee;
private float _ipt;
private float _total_premium;
private bool _is_renewal;
private string _operator;
private string _date_quoted;
private bool _on_cover;
private string _on_cover_date;
private string _on_cover_operator;
/// <summary>
/// </summary>
public Policy()
{
Trace.Constructor("Policy()");
}
/// <summary>
/// </summary>
public Policy(DataRow dr)
{
Trace.EnterConst("Policy(dr)");
if (dr != null)
{
SetValues(dr);
}
Trace.LeaveConst("Policy(dr)");
}
public void SetValues(DataRow dr)
{
_qid = (int)dr["qid"];
_cid = (int)dr["cid"];
_policy_number = dr["policy_number"].ToString();
_inception_date = dr["inception_date"].ToString();
_expiry_date = dr["expiry_date"].ToString();
_raw_premium = (float)dr["raw_premium"];
_policy_fee = (float)dr["policy_fee"];
_admin_fee = (float)dr["admin_fee"];
_ipt = (float)dr["ipt"];
_total_premium = (float)dr["total_premium"];
_is_renewal = (bool)dr["is_renewal"];
_operator = dr["operator"].ToString();
_date_quoted = dr["date_quoted"].ToString();
_on_cover = (bool)dr["on_cover"];
_on_cover_date = dr["on_cover_date"].ToString();
_on_cover_operator = dr["on_cover_operator"].ToString();
}
}
The code that instantiates the class and calls the method is in here:
foreach (DataTable dt in dsPolicies.Tables)
{
foreach (DataRow dr in dt.Rows)
{
Policy policy = new Policy();
policy.SetValues(dr);
arrPolicies.Add(policy);
}
}
Any ideas what is causing this exception?Floela <floela@.benjamin.com> wrote:
> I keep geting the exception:
> System.InvalidCastException: Specified cast is not valid.
>
> I get this when I try to pass a DataRow into an object method. The line that
> causes this error is:
> policy.SetValues(dr);
I'm sure that's one part of the stack, but I don't think that's going
to be the actual direct causal line. I suspect it's somewhere within
SetValues itself. Have you tried stepping through SetValues to see
where the exception is thrown?
--
Jon Skeet - <skeet@.pobox.com>
http://www.pobox.com/~skeet/
If replying to the group, please do not mail me too
> I get this when I try to pass a DataRow into an object method. The line
that
> causes this error is:
> policy.SetValues(dr);
Inside SetValues there are many cast without checking,
i wonder if they are all safe ?
> public void SetValues(DataRow dr)
> {
> _qid = (int)dr["qid"];
> _cid = (int)dr["cid"];
> _raw_premium = (float)dr["raw_premium"];
> _policy_fee = (float)dr["policy_fee"];
> _admin_fee = (float)dr["admin_fee"];
> _ipt = (float)dr["ipt"];
> _total_premium = (float)dr["total_premium"];
> _is_renewal = (bool)dr["is_renewal"];
> _on_cover = (bool)dr["on_cover"];
> }
Floela <floela@.benjamin.com> wrote:
> > I'm sure that's one part of the stack, but I don't think that's going
> > to be the actual direct causal line. I suspect it's somewhere within
> > SetValues itself.
> SetValues is pretty simple - just assigning the values from the DataRow to
> private variables within the class (see my original post). There's nothing
> glaring as to where the problem could be within this method.
Yes there is - you've got lots of casts in SetValues. I'm sure it'll be
one of those which is failing.
> > Have you tried stepping through SetValues to see
> > where the exception is thrown?
> No I haven't, as I'm actually coding the application using TextPad, not
> VS.NET.
Ah. That's a pain. Can you print out a stack trace to show exactly
where it's failing?
--
Jon Skeet - <skeet@.pobox.com>
http://www.pobox.com/~skeet/
If replying to the group, please do not mail me too
Saturday, March 31, 2012
System.InvalidCastException: Specified cast is not valid
Labels:
asp,
cast,
datarow,
exceptionsystem,
geting,
invalidcastexception,
method,
net,
object,
specified,
systeminvalidcastexception,
valid
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment