sysMain class-ը
Ինպես տեսնում ենք դիագռամից, sysMain-ը ունի հետևյալ ֆունկցիաները՝
int SetID(string uniqueID)
վերադարձնում է
(սրանք կոնստանտներ են հայտարարված sysConstant կլասում)
edtNone-եթե ինչ որ խնդիր է առաջացել (0)
edtExist-եթե տողը գոյություն ունեղող ա (1)
edtNew-եթե տողը նոր է (2)
bool SetValue(string columnName, string value)
false - եթե validation-ը չի անցել (սրա մասին մի քիչ հետո)
true - եթե ամեն ինչ անցել է
string GetValue(string columnName)
վերադարձնում է սյունի արժեքը, եթե չկա ապա դատարկ
bool Delete()
bool Write()
սխալ վերադարձնելու դեպքում սխալի մասին ավելի ինֆորմացիա կարող ենք ստանալ
public int LastErrorNum
public string LastErrorMsg
փոփոխականների միջոցով
Հիմա ամեն ֆունկցիայի մասին ավելի մանրամասն
1.SetID
Կոդը՝
Կոդ:
// Set Records to current row
virtual public int SetId(string uniqueId) {
int retVal = sysConstant.edtNone;
this.EditState = sysConstant.edtNone;
retVal = this.FindId(uniqueId); // from sysMainView
if (retVal != sysConstant.edtNone) {
if (this.cSecurityAccess > sysConstant.securityView) {
this.Clear(); // For be sure that memmory is clear
// No need to add ID to physical file
if (this.SetValue(cTableUniqueCol, uniqueId)) { // Add to current Rec
retVal = sysConstant.edtNew;
this.EditState = sysConstant.edtNew;
}
}
}
return retVal;
}
Վերցնում ենք ստացված արժեքը, փոխանցում FindID—ին, որը հայտարարված է sysMainView կլասում։
Այնտեղ էդ Id-ով select ենք կազմում Main աղուսյակի վրա, կոդի մաս՝
Կոդ:
string tmpQueryString = "SELECT * FROM @MainTable WHERE @TableUniqCol = @uniqueID;";
SqlCommand tmpSqlCommand = new SqlCommand(tmpQueryString, sysDataBaseConnect.SQLConnection);
tmpSqlCommand.Parameters.AddWithValue("@uniqueID", uniqueId);
tmpSqlCommand.Parameters.AddWithValue("@MainTable", cMainTable);
tmpSqlCommand.Parameters.AddWithValue("@TableUniqCol", cTableUniqueCol);
SqlDataReader resultRec = sysDataBaseConnect.executeQuery(tmpSqlCommand);
if (ReadFromTableToRec(resultRec)) {
retVal = sysConstant.edtExist;
}
Եթե գոյություն ունի, արժեքները լցնում ենք cCurrentRec-ի և cPhysicalRec-ի մեջ։
Եթե գոյություն չունի, ապա տողը նոր է, և միայն ավելացնում ենք ID-ն cCurrentRec-ում և թողնում, որպեսզի իր հետ աշխատեն։
2. SetValue
Կոդը՝
Կոդ:
virtual public bool SetValue(string colName, string value) {
bool retVal = false;
this.ClearErrors(); // Need to Clear Errors
value = value.Trim(); // Strip off Spaces
if (this.cCurrentRec.ContainsKey(colName)) {
// validation !!!
int tmpRetVal = sysConstant.retValidationNone;
if (!cSkipValidation) {
tmpRetVal = this.ExecuteValidationFunction(colName, value);
}
if (tmpRetVal == sysConstant.retValidationSuccess || tmpRetVal == sysConstant.retValidationNone) {
this.cCurrentRec[colName] = value;
retVal = true;
}
}
else {
this.LastErrorNum = sysConstant.REC_ERROR;
this.LastErrorMsg = sysConstant.REC_COLUMN_INVALID;
}
return retVal;
}
ExecuteValidationFunction - ֆունկցաի համար առանձին պոստ կտարամդրենք, իսկ հիմա ինչպես տեսնում ենք, մուտքագրված արժեքը վերցնում ենք և
cCurrentRec dictionary-ի մեջ մուտքագրված սյունի համար ավելացնում։
Այս ֆունկցիաի նման է SetValueNoValidation-ը որ առանց validation է setValue անում։
3․ GetValue
Էլ մի միանգամից փակի էջը, էս ֆունկցիան կարճ ա
Կոդ:
virtual public string GetValue(string colName) {
this.ClearErrors(); // Need to Clear Errors
string retVal = "";
if (this.cCurrentRec.ContainsKey(colName)) {
retVal = this.cCurrentRec[colName];
}
else {
this.LastErrorNum = sysConstant.REC_ERROR;
this.LastErrorMsg = sysConstant.REC_COLUMN_INVALID;
}
return retVal;
}
Ինձ թվում է պարզ է կարիք չկա մանրամասնելու։
Ունենք նաև GetOldValue ֆունկցիան, որը cCurrentRec-ի փոխարեն օգտագործում է cPhysicalRec-ը։
4. Delete
Delete-ի մի կտոր՝
Կոդ:
bool preDeleteRetVal = this.PreDeleteRec(uniqueId);
if (preDeleteRetVal) {
string tmpQueryString = "DELETE FROM @MainTable WHERE @TableUniqCol = @uniqueID;";
SqlCommand tmpSqlCommand = new SqlCommand(tmpQueryString, sysDataBaseConnect.SQLConnection);
tmpSqlCommand.Parameters.AddWithValue("@uniqueID", uniqueId);
tmpSqlCommand.Parameters.AddWithValue("@MainTable", cMainTable);
tmpSqlCommand.Parameters.AddWithValue("@TableUniqCol", cTableUniqueCol);
int rowsAffected = sysDataBaseConnect.executeNonQuery(tmpSqlCommand);
if (rowsAffected == 0) {
retVal = false;
this.LastErrorNum = sysConstant.SQL_ERROR;
this.LastErrorMsg = sysDataBaseConnect.LastErrorMsg;
}
else {
bool postDeleteRetVal = this.PostDeleteRec(uniqueId);
}
}
Այստեղ հետաքրքիր է այն, որ delete-ից հետո և առաջ կանչում ենք, postDeleteRec, preDeleteRec ֆունկցիաները, որոնք հայտարարված են virtual և թույլ կտան այս կլասը ժառանգողին առանց delete-ի հիմնական կոդին կպնելու ինչ որ լոգիկաներ ավելացնել։
Write-ը առանձին թեմա է ու իմ կարծիքով արժանի է, որ իր մասին հետո մի քիչ երկար խոսենք։
Էջանիշներ