prettify

baseline

C# class template

Template for a business class in C#.
The example is the "Party" from the "Party-Person-Organization" pattern.
Party.cs
public int nkPar { get; set; }
public byte[] rvPar { get; set; }
public int nfParPerOwn { get; set; }
public string sfParPerOwn { get; set; }
public string sParTag { get; set; }
public string ePar {get;set;}
public string sParAFM { get; set; }
public string sParDOY { get; set; }
public string sParTxt { get; set; }
public int nAudUser { get; set; }
public string sAudIp { get; set; }
public DateTime dAud { get; set; }

public string sError { get; set; }
public Party() {
    Clear();
}
public Party(int nkPar) {
    LoadNk(nkPar);
}
public Party Clear() {
    nkPar = 0;
    rvPar = Constants.rv0;
    nfParPerOwn = 0;
    sfParPerOwn = "";
    sParTag = "";
    ePar = "";
    sParAFM = "";
    sParDOY = "";
    sParTxt = "";
    nAudUser = UserLib.nkUsr;
    sAudIp = "";
    dAud = Constants.d0;
    return this;
}
#region SQL
public Party Save() {
    SqlConnection cn = DB.GetCn();
    SqlCommand cmd = cn.CreateCommand();
    cmd.CommandText =
        "UPDATE Partys SET"
        + "nfParPerOwn=@nfParPerOwn,sParTag=@sParTag,ePar=@ePar,sParAFM=@sParAFM,sParDOY=@sParDOY,sParTxt=@sParTxt"
        + ",nAudUser=@nAudUser,sAudIp=@sAudIp,dAud=SYSUTCDATETIME()"
        + " WHERE nkPar=@nkPar AND rvLoc=@rvLoc"
        + ";IF @@ROWCOUNT=1 SELECT CAST(1 AS BIT); ELSE"
        + " IF EXISTS(SELECT * FROM Partys WHERE nkPar=@nkPar)"
                + " SELECT CAST(0 AS BIT)"
            + " ELSE "
                + " INSERT Partys ("
                + "nfParPerOwn,sParTag,ePar,sParAFM,sParDOY,sParTxt,nAudUser,sAudIP"
                + ") OUTPUT CAST(1 AS BIT)"
                + " VALUES ("
                + "@nfParPerOwn,@sParTag,@ePar,@sParAFM,@sParDOY,@sParTxt,@nAudUser,@sAudIP"
                + ")";
    cmd.Parameters.Add("nkPar", SqlDbType.Int).Value = nkPar;
    cmd.Parameters.Add("@rvPar", SqlDbType.VarBinary).Value = rvPar;
    cmd.Parameters.Add("@nfParPerOwn", SqlDbType.Int).Value = nfParPerOwn;
    if (nfParPerOwn == 0) { cmd.Parameters["@nfParPerOwn"].Value = DBNull.Value; }
    cmd.Parameters.Add("@sParTag", SqlDbType.NVarChar, 100).Value = sParTag;
    cmd.Parameters.Add("@ePar", SqlDbType.NChar, 3).Value = ePar;
    cmd.Parameters.Add("@sParAFM", SqlDbType.NVarChar, 50).Value = sParAFM;
    cmd.Parameters.Add("@sParDOY", SqlDbType.NVarChar, 100).Value = sParDOY;
    cmd.Parameters.Add("@sParTxt", SqlDbType.NVarChar, -1).Value = sParTxt;
    cmd.Parameters.Add("@nAudUser", SqlDbType.Int).Value = UserLib.nkUsr;
    cmd.Parameters.Add("@sAudIp", SqlDbType.NVarChar, 50).Value = UserLib.sUsrIP;
    bool bOK = (bool)cmd.ExecuteScalar();
    cmd.Dispose();
    cn.Dispose();
    if (!bOK) sError = "RV";
    return this;
}
public ErMsgs Validate() {
    ErMsgs oErs = new ErMsgs();
    //if (this.nfLocPar == 0) {
    // oErs.Add("", ErMsg.enSeverity.eError, "nfLocPar", "Enter a value");
    //}
    return oErs;
}
public Party LoadNk(int nk) {
    SqlConnection cn = DB.GetCn();
    SqlCommand cmd = cn.CreateCommand();
    cmd.CommandText = "SELECT *"
        + ",sfParPerOwn=COALESCE(sPerLNm+' '+sPerFNm)"
        + " FROM Partys"
        + " LEFT JOIN Persons ON nfParPerOwn=fPerPar"
        + " WHERE nkPar=@nk";
    cmd.Parameters.Add("@nk", SqlDbType.Int).Value = nk;
    bool bOK = Load(cmd);
    cmd.Dispose();
    cn.Dispose();
    return this;
}
private bool Load(SqlCommand cmd) {
    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows) {
        dr.Read();
        ParseDr(dr);
    } else {
        Clear();
    }
    dr.Close();
    cmd.Connection.Close();
    return true;
}
public void ParseDr(SqlDataReader dr) {
    DataView dvSchema = dr.GetSchemaTable().DefaultView;
    nkPar = (int)dr["nkPar"];
    rvPar = (byte[])dr["rvPar"];
    //nfParPerOwn = (int)(dr.IsDBNull(dr.GetOrdinal("nfParPerOwn")) ? 0 : dr["nfParPerOwn"]);
    nfParPerOwn = (dr["nfParPerOwn"] == DBNull.Value ? 0 : (int)dr["nfParPerOwn"]);
    //sfParPerOwn = (string)dr["sfParPerOwn"];
    sfParPerOwn = (Ut.FieldExists(dvSchema, "sfParPerOwn") ? (string)dr["sfParPerOwn"] : "");
    sParTag = (string)dr["sParTag"];
    ePar = (string)dr["ePar"];
    sParAFM = (string)dr["sParAFM"];
    sParDOY = (string)dr["sParDOY"];
    sParTxt = (string)dr["sParTxt"];
    nAudUser = (int)dr["nAudUser"];
    sAudIp = (string)dr["sAudIp"];
    dAud = (DateTime)dr["dAud"];

    return;
}
public static bool Delete(int nk) {
    SqlConnection cn = DB.GetCn();
    SqlCommand cmd = cn.CreateCommand();
    cmd.CommandText = "DELETE Partys WHERE nkPar=@nk";
    cmd.Parameters.Add("@nk", SqlDbType.Int).Value = nk;
    cmd.Dispose();
    int nRows = cmd.ExecuteNonQuery();
    cn.Dispose();
    return (nRows == 1);
}
#endregion
#region Client-server
public void ParseFromJs(string sVals) {
    string[] aVals = sVals.Split('\t');
    int nExpected = 8;
    if (aVals.Length != nExpected) System.Diagnostics.Debug.Fail("Expected: " + nExpected.ToString() + " fields\nReceived: " + aVals.Length.ToString());
    int nFld = 0;
    nkPar = int.Parse(aVals[nFld++]);
    rvPar = Ut.RowVerFrString(aVals[nFld++]);
    nfParPerOwn = int.Parse(aVals[nFld++]);
    sParTag = Regex.Replace(aVals[nFld++].Replace(',', ' '), @"\s+-?\s*", " "); //Remove "," "-"
    ePar = aVals[nFld++];
    sParAFM = aVals[nFld++];
    sParDOY = aVals[nFld++];
    sParTxt = aVals[nFld++];
}
public string ToJson() {
    StringBuilder sb = new StringBuilder("[");
    sb.Append(nkPar.ToString());
    sb.Append("," + Ut.jstr(Ut.RowVerToString(rvPar)));
    sb.Append("," + nfParPerOwn.ToString());
    sb.Append("," + Ut.jstr(sfParPerOwn));
    sb.Append("," + Ut.jstr(sParTag));
    sb.Append("," + Ut.jstr(ePar));
    sb.Append("," + Ut.jstr(sParAFM));
    sb.Append("," + Ut.jstr(sParDOY));
    sb.Append("," + Ut.jstr(sParTxt));
    sb.Append("]");
    return sb.ToString();
}
#endregion

No comments:

Post a Comment