Նախ ծանոթանանք սկզբնական արխիտեկտուռայի հետ՝

Հիշենք այս "դիագռամանմանը": Հետագա 1-2 պոստերի ընթացքում սա մեզ պետք կգա։
Սկսենք sysInfSchema-ից։ Այս օբյեկտը նախատեսված է INFORMATION_SCHEMA-ից, որտեղ SQL Server-ում պահվում են ընդհանուր Database-ի մասին տեղեկությունները, կոնկրետ աղուսյակի, որը նշվել է sysMain-ը ժառանգած կլասի միջոցով(cMainTable փոփախական), սյուների արժեքները ստանալու համար։
Ինչպե՞ս ենք մենք ստանում կոնկրետ աղյուսակիի սյուների անունները։
Կոդը՝
Կոդ:
static public List<String> GetTableColumns(string tableName) {
List<String> retVal;
String tmpTableName = tableName.ToUpper();
if (!TableColumnsCache.ContainsKey(tmpTableName)) { // If table not found in cache
retVal = new List<String>();
string tmpQueryString = "SELECT name FROM sys.columns WHERE object_id = OBJECT_ID(@TableName)";
SqlCommand tmpSqlCommand = new SqlCommand(tmpQueryString, sysDataBaseConnect.SQLConnection);
tmpSqlCommand.Parameters.AddWithValue("@TableName", tableName);
SqlDataReader columnsReaded = sysDataBaseConnect.executeQuery(tmpSqlCommand);
if (columnsReaded.HasRows) {
while (columnsReaded.Read()) {
retVal.Add(columnsReaded["name"].ToString());
}
TableColumnsCache.Add(tmpTableName, retVal); // Add to columns catch
}
else {
LastErrorMsg = "Table Not Found";
}
columnsReaded.Close();
}
else {
retVal = TableColumnsCache[tmpTableName];
}
return retVal;
Եթե 1 անգամ սեսիայի ընթացքում աղյուսակի սյուների անուները ստացել ենք, ապա էլ կարիք չկա նորից ստանալու, դրա համար ստանալուց հետ պահում ենք TableColumnsCache օբյեկտի մեջ, որը հայտարարված է այսպես՝ Dictionary<string, List<string>>, հետագայում, եթե ուրիշ օբյեկտ այդ թեյբլի աղյուսակները ուզի, իրեն միանգամից կվերադարձնենք Cache-ից, ոչ թե նորից հարցում կկազմենք դրանք ստանալու համար։ (sysInfSchema օբյեկտը static է)
Այս ֆունկցաին կանչվում է sysMain-ի Init() - ֆունկցիաից, որի միջոցով էլ ստեղծվում են մեր հիմնական 2 dictionary-ների key-երը կոդը՝
Կոդ:
cTableColumnsList = sysInfSchema.GetTableColumns(this.cMainTable);
if (cTableColumnsList.Any()) {
foreach (string colName in cTableColumnsList) { // Loop through Columns list
this.cPhysicalRec.Add(colName, "");
}
this.cCurrentRec = new Dictionary<string, string>(this.cPhysicalRec);
retVal = true;
}
Ինչպես երևում է Diagram—ից մեր sysMain օբյեկտը ունի 2 Dictionary օբյեկտներ՝
Կոդ:
protected Dictionary<string, string> cPhysicalRec; // Physical Rec ('column' => 'value' )
protected Dictionary<string, string> cCurrentRec; // Current Record ('column' => 'value' )
cPhysicalRec-ի մեջ, երբ կանչվում է SetId(string uniqueID) ֆունկցիան (որի մասին հետո կխոսենք) համապատասխանաբար լցվում են table-ի աղյուսակների արժեքները, հետո
նույն արժեքները copy են լինում cCurrentRec-Ի մեջ, որի հետ էլ հետագայում աշխատում ենք՝
SetValue, GetValue, SetRecord...սրանից մասին հետո։
Էջանիշներ