Hi, I have developed one class called CProductInfo providing == and !=
operator features. I have one problem.
When I use this class in my program, say
CProductInfo product = null;
and later, when i check for emptiness,
if (product==null)
it returns false as if the product instance is not empty.
I tried various ways to eliminate this run-time error, but it just does
not happen. Also I don't think there is use full tips on net for this.
Can someone help?
Thanks in advance - Rhonald
<<<< THE SOURCE CODE FOR CProductInfo IS BELOW >>>>>
using System;
using System.Data;
using System.Data.Sql Client;
using MyDataLibrary;
namespace ProductManager2 006
{
/// <summary>
/// Summary description for CProductInfo.
/// </summary>
public class CProductInfo:Co nnectionManager
{
internal long m_AutoIndex = 0;
internal string m_SerialNumber = "";
public string Title = "";
private DateTime m_DateReference = DateTime.Now;
private DateTime m_DateStart = DateTime.Now, m_DateFinish =
DateTime.Now;
public ProductType Type = ProductType.Cus tomizedProduct;
public string Version = "", Build = "", Explanation = "";
public string Notes = "", Features = "", SystemRequireme nts = "",
PreRequisites = "";
public bool Status = true;
private bool m_IsDateStartAv ailable = false, m_IsDateFinishA vailable
= false;
public CProductInfo()
{
//
// TODO: Add constructor logic here
//
}
public CProductInfo(st ring productId)
{
Open(productId) ;
}
public CProductInfo(Da taRow dr)
{
if (dr!=null)
{
m_AutoIndex = DataConverter.T oLong(dr["auto_index "].ToString());
m_SerialNumber = dr["pk_product _id"].ToString();
m_DateReference =
Convert.ToDateT ime(dr["date_reference "].ToString());
Title = dr["title"].ToString();
if (!dr.IsNull(4)) DateStart =
Convert.ToDateT ime(dr["date_start "].ToString());
if (!dr.IsNull(5)) DateFinish =
Convert.ToDateT ime(dr["date_finis h"].ToString());
Type =
DataConverter.T oBoolean(dr["product_ty pe"].ToString())?Pr oductType.Gener alizedProduct:P roductType.Cust omizedProduct;
Version = dr["version"].ToString();
Build = dr["build"].ToString();
Notes = dr["notes"].ToString();
Features = dr["features"].ToString();
SystemRequireme nts = dr["system_require ments"].ToString();
PreRequisites = dr["prerequisi tes"].ToString();
Status = DataConverter.T oBoolean(dr["status"].ToString());
}
}
private string _NewID
{
get
{
SqlCommand cmdSql = new SqlCommand("sel ect isnull(max(auto _index),
0) as counter from mstrproducts", Connection);
try
{
OpenConnection( );
SqlDataReader dr = cmdSql.ExecuteR eader();
if (dr.Read())
{
return
((DataConverter .ToInteger(dr["counter"].ToString())+1) .ToString("0000 0"));
}
}
catch(Exception ex)
{
Console.WriteLi ne(ex.ToString( ));
return null;
}
finally
{
CloseConnection ();
}
return null;
}
}
public string SerialNumber
{
get
{
return m_SerialNumber;
}
}
public DateTime DateReference
{
get
{
return m_DateReference ;
}
}
public DateTime DateStart
{
get
{
return m_DateStart;
}
set
{
m_DateStart = value;
m_IsDateStartAv ailable = true;
}
}
public DateTime DateFinish
{
get
{
return m_DateFinish;
}
set
{
m_DateFinish = value;
m_IsDateFinishA vailable = true;
}
}
public bool IsDateStartAvai lable
{
get
{
return m_IsDateStartAv ailable;
}
}
public bool IsDateFinishAva ilable
{
get
{
return m_IsDateFinishA vailable;
}
}
public bool IsCustomBuilt
{
get
{
return Type == ProductType.Cus tomizedProduct? true:false;
}
}
public bool IsGeneralBuilt
{
get
{
return Type == ProductType.Gen eralizedProduct ?true:false;
}
}
public bool Open(string id)
{
SqlCommand cmdSql = new SqlCommand("sel ect * from mstrproducts where
pk_product_id=' "+id+"'", Connection);
try
{
OpenConnection( );
SqlDataReader dr = cmdSql.ExecuteR eader();
if (dr.Read())
{
m_AutoIndex = DataConverter.T oLong(dr["auto_index "].ToString());
m_SerialNumber = dr["pk_product _id"].ToString();
m_DateReference =
Convert.ToDateT ime(dr["date_reference "].ToString());
Title = dr["title"].ToString();
if (!dr.IsDBNull(4 ))
{
DateStart = Convert.ToDateT ime(dr["date_start "].ToString());
m_IsDateStartAv ailable = true;
}
else
m_IsDateStartAv ailable = false;
if (!dr.IsDBNull(5 ))
{
DateFinish = Convert.ToDateT ime(dr["date_finis h"].ToString());
m_IsDateFinishA vailable = true;
}
else
m_IsDateFinishA vailable = false;
Type =
DataConverter.T oBoolean(dr["product_ty pe"].ToString())?Pr oductType.Gener alizedProduct:P roductType.Cust omizedProduct;
Version = dr["version"].ToString();
Build = dr["build"].ToString();
Notes = dr["notes"].ToString();
Features = dr["features"].ToString();
SystemRequireme nts = dr["system_require ments"].ToString();
PreRequisites = dr["prerequisi tes"].ToString();
Status = DataConverter.T oBoolean(dr["status"].ToString());
}
}
catch(Exception ex)
{
Console.WriteLi ne(ex.ToString( ));
return false;
}
finally
{
CloseConnection ();
}
return true;
}
internal bool Save()
{
SqlCommand cmdSql = new SqlCommand("Reg isterProducts", Connection);
cmdSql.CommandT ype = CommandType.Sto redProcedure;
if (m_SerialNumber .Trim().Length< =0) m_SerialNumber = _NewID;
cmdSql.Paramete rs.Add(new SqlParameter("@ product_id",
SqlDbType.VarCh ar, 10)).Value = SerialNumber;
cmdSql.Paramete rs.Add(new SqlParameter("@ date_reference" ,
SqlDbType.Small DateTime)).Valu e =
Convert.ToDateT ime(DateReferen ce.ToShortDateS tring());
cmdSql.Paramete rs.Add(new SqlParameter("@ title", SqlDbType.VarCh ar,
150)).Value = Title;
if (IsDateStartAva ilable) cmdSql.Paramete rs.Add(new
SqlParameter("@ date_start", SqlDbType.Small DateTime)).Valu e =
DateStart;
if (IsDateFinishAv ailable) cmdSql.Paramete rs.Add(new
SqlParameter("@ date_finish", SqlDbType.Small DateTime)).Valu e =
DateFinish;
cmdSql.Paramete rs.Add(new SqlParameter("@ product_type",
SqlDbType.Bit)) .Value = (Type == ProductType.Gen eralizedProduct ?0:1);
cmdSql.Paramete rs.Add(new SqlParameter("@ version",
SqlDbType.VarCh ar, 15)).Value = Version;
cmdSql.Paramete rs.Add(new SqlParameter("@ build", SqlDbType.VarCh ar,
15)).Value = Build;
cmdSql.Paramete rs.Add(new SqlParameter("@ notes", SqlDbType.NVarC har,
500)).Value = Notes;
cmdSql.Paramete rs.Add(new SqlParameter("@ features",
SqlDbType.NVarC har, 500)).Value = Features;
cmdSql.Paramete rs.Add(new SqlParameter("@ system_requirem ents",
SqlDbType.NVarC har, 500)).Value = SystemRequireme nts;
cmdSql.Paramete rs.Add(new SqlParameter("@ prerequisites",
SqlDbType.NVarC har, 500)).Value = PreRequisites;
cmdSql.Paramete rs.Add(new SqlParameter("@ status",
SqlDbType.Bit)) .Value = (Status?1:0);
try
{
OpenConnection( );
cmdSql.ExecuteN onQuery();
}
catch(Exception ex)
{
Console.WriteLi ne(ex.ToString( ));
return false;
}
return true;
}
internal bool Delete()
{
return false;
}
public static bool operator == (CProductInfo product1, CProductInfo
product2)
{
return product1.Equals (product2);
}
public static bool operator != (CProductInfo product1, CProductInfo
product2)
{
return (!product1.Equa ls(product2));
}
public override bool Equals(object obj)
{
if (!(obj is CProductInfo)) return false;
return this==(CProduct Info)obj;
}
public override int GetHashCode()
{
return base.GetHashCod e ();
}
public override string ToString()
{
return base.ToString ();
}
}
}