Rad sa metodama za rad sa bazom podataka uvek radim na isti nacin. Imam klasu OpstiManager koja ima genericke metode za Insert, Update, Delete. Evo metode za insert:
protected void CreateObject(int PrimaryKey, DataTable Attributes)
{
try
{
string aTableName = Attributes.TableName;
SqlCommand aCommand = broker.CreateCommand();
string sqlQuery = "INSERT INTO " + aTableName + " (" + aTableName + "ID, ";
foreach (DataRow row in Attributes.Rows)
sqlQuery += row["Name"].ToString() + ", ";
sqlQuery = sqlQuery.Remove(sqlQuery.Length - 2);
sqlQuery += ") VALUES (";
sqlQuery += broker.FormatParameterName(aTableName + "ID, ");
foreach (DataRow row in Attributes.Rows)
sqlQuery += broker.FormatParameterName(row["Name"].ToString()) + ", ";
sqlQuery = sqlQuery.Remove(sqlQuery.Length - 2);
sqlQuery += ") ";
aCommand.CommandText = sqlQuery;
broker.AddInputParameter(aCommand, aTableName + "ID", DbType.Int32, PrimaryKey);
foreach (DataRow row in Attributes.Rows)
broker.AddInputParameter(aCommand, row["Name"].ToString(),
(DbType)row["DbType"], row["Value"]);
aCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
}
Za svaki objekat pravim po jednog managera koji nasledjuje klasu opstiManager i u njemu imam metode za insert, update, delete koje samo pripreme ulazne argumente za iste te metode opstegManagera i pozivaju metodu opsteg managera. Na primer klasa koja radi sa evidencijama ima metodu AddEvidence:
public string AddEvidence(string SifraKorisnika, DateTime DatumEvidencije, int Glava, DataTable Stavke)
{
try
{
DataTable Evidencija = MasterManager.CreateAttributesTable("tblEvidencija");
string BrojEvidencije = GetEvidenceNumnber(Glava);
Evidencija.Rows.Add(new object[] { "BrojZahteva", BrojEvidencije, DbType.String });
Evidencija.Rows.Add(new object[] { "SifraKorisnika", SifraKorisnika, DbType.String });
Evidencija.Rows.Add(new object[] { "DatumPredajeZahteva", DatumEvidencije, DbType.DateTime });
Evidencija.Rows.Add(new object[] { "Glava", Glava, DbType.Int32 });
CreateObjectPK(Evidencija);
foreach (DataRow Stavka in Stavke.Rows)
{
int RedniBr = Convert.ToInt32(Stavka["RedniBr"]);
string Opis = Stavka["Opis"].ToString();
string KontoKorisnika = Stavka["KontoKorisnika"].ToString();
string TransferniKonto = Stavka["TransferniKonto"].ToString();
double Iznos = Convert.ToDouble(Stavka["Iznos"]);
AddEvidenceItem(RedniBr, BrojEvidencije, Opis, TransferniKonto, KontoKorisnika, Iznos, 1);
}
return BrojEvidencije;
}
catch (Exception ex)
{
throw ex;
}
}
Da li ovo moze biti mozda Adapter patern?
[Shadowed: dodati code tagovi.]
[Ovu poruku je menjao Shadowed dana 04.07.2008. u 23:18 GMT+1]