title: Object cannot be cast from DBNull to other types
body: <p>Object cannot be cast from DBNull to other types.</p>
  
  <p>I have a following function which throws the above error. I am handling all nulls in store procedure and in the C# code.</p>
  
  <p>So where is it getting this error?</p>
  
  <p>I can see the error in the catch block. But i am not understanding which line in the following create() getting the error.</p>
  
  <pre><code>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;
      }
  }
  </code></pre>