Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object cannot be cast from DBNull to other types

Object cannot be cast from DBNull to other types.

I have a following function which throws the above error. I am handling all nulls in store procedure and in the C# code.

So where is it getting this error?

I can see the error in the catch block. But i am not understanding which line in the following create() getting the error.

public Boolean Create(DataTO DataTO) {     IDbTrans transaction = null;     IDbCmd IDbCmd;      string EncryptedPassword = Encrypt(DataTO.txtPwd);     Base dataAccCom = null;      try     {         dataAccCom = Factory.Create();         dataAccCom.OpenConnection();         transaction = dataAccCom.BeginTransaction();         IDbCmd = dataAccCom.CreateCommand("sp_Register", true);         dataAccCom.AddParameter(IDbCmd, "op_Id", DbType.Int64, 0, ParameterDirection.Output);         dataAccCom.AddParameter(IDbCmd, "p_dlstTitle", DbType.String, ReplaceNull(DataTO.dlstTitle));         dataAccCom.AddParameter(IDbCmd, "p_txtFirstName", DbType.String, ReplaceNull(DataTO.txtFirstName));         dataAccCom.AddParameter(IDbCmd, "p_txtMiddleName", DbType.String, ReplaceNull(DataTO.txtMiddleName));         dataAccCom.AddParameter(IDbCmd, "p_txtLastName", DbType.String, ReplaceNull(DataTO.txtLastName));         dataAccCom.AddParameter(IDbCmd, "p_txtDob", DbType.DateTime, DataTO.txtDob);         dataAccCom.AddParameter(IDbCmd, "p_txtDesig", DbType.String, ReplaceNull(DataTO.txtDesig));         dataAccCom.AddParameter(IDbCmd, "p_txtOFlatNo", DbType.String, ReplaceNull(DataTO.txtOFlatNo));         dataAccCom.AddParameter(IDbCmd, "p_txtOBuild", DbType.String, ReplaceNull(DataTO.txtOBuild));         dataAccCom.AddParameter(IDbCmd, "p_txtOPost", DbType.String, ReplaceNull(DataTO.txtOPost));         dataAccCom.AddParameter(IDbCmd, "p_txtOArea", DbType.String, ReplaceNull(DataTO.txtOArea));         dataAccCom.AddParameter(IDbCmd, "p_txtOCity", DbType.String, ReplaceNull(DataTO.txtOCity));         dataAccCom.AddParameter(IDbCmd, "p_txtRBuild", DbType.String, ReplaceNull(DataTO.txtRBuild));         dataAccCom.AddParameter(IDbCmd, "p_txtRPost", DbType.String, ReplaceNull(DataTO.txtRPost));         dataAccCom.AddParameter(IDbCmd, "p_txtUserID", DbType.String,ReplaceNull(DataTO.txtUserID));         dataAccCom.AddParameter(IDbCmd, "p_txtPwd", DbType.String, ReplaceNull(EncryptedPassword));         dataAccCom.ExecuteNonQuery(IDbCmd);         DataTO.Id = Convert.ToInt64(dataAccCom.GetParameterValue(IDbCmd, "op_Id"));         transaction.Commit();         return true;        }     catch (System.Exception ex)     {         if (transaction != null)         {             transaction.Rollback();         }         throw ex;     }     finally     {         transaction = null;         if (dataAccCom != null)         {             dataAccCom.CloseConnection();         }         dataAccCom = null;         IDbCmd = null;     } }  public string ReplaceNull(string value) {     if (value == null)     {         return "";     }     else     {         return value;     } }  public DateTime ReplaceNull(DateTime value) {     if (value == null)     {         return DateTime.Now;     }     else     {         return value;     } }  public double ReplaceNull(double value) {     if (value == null)     {         return 0.0;     }     else     {         return value;     } } 
like image 808
Jaison Avatar asked May 23 '11 14:05

Jaison


People also ask

What does object Cannot be cast from DBNull to other types mean?

Accept Solution Reject Solution. The error is pretty explicit: "Object cannot be cast from DBNull to other types" Your database field can (and does) contain SQL NULL values - and when they are returned via a query, the value is a specific code which represents this in a way that your code can check and use: DBNull. ...

What is DBNull?

The DBNull class represents a nonexistent value. In a database, for example, a column in a row of a table might not contain any data whatsoever. That is, the column is considered to not exist at all instead of merely not having a value. A DBNull object represents the nonexistent column.


1 Answers

I'm thinking that your output parameter is coming back with a DBNull value. Add a check for that like this

var outputParam = dataAccCom.GetParameterValue(IDbCmd, "op_Id"); if(!(outputParam is DBNull))      DataTO.Id = Convert.ToInt64(outputParam); 
like image 82
Bala R Avatar answered Oct 19 '22 23:10

Bala R