obecná třída pro přístup k databázi   zodpovězená otázka

ASP.NET WebForms

Dobrý den. Chtěl bych se zeptat, zda máte někdo zkušenost s návrhem obecné třídy pro přístup do db. Abych v DAL nemusel pro každý požadavek tvořit část kódu která se všude opakuje viz. níže..jen bych předal název sql proc kterou chci použít a počet parametrů a jejich hodnoty. Jde mi hlavně o centralizování otevření připojení k db,aby se neotvíralo na mnoha místech aplikace.

using (SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString))
            {
                SqlCommand myCommand = new SqlCommand("spClanekInsert", myConnection);
                myCommand.CommandType = CommandType.StoredProcedure;
 myCommand.Parameters.AddWithValue("@id", clanek.Id);
 myCommand.Parameters.AddWithValue("@nazev", clanek.Name);
 myCommand.Parameters.AddWithValue("@datum",clanek.DateOfIssue);
               
                DbParameter returnValue;
                returnValue = myCommand.CreateParameter();
                returnValue.Direction = ParameterDirection.ReturnValue;
                myCommand.Parameters.Add(returnValue);

                myConnection.Open();
                myCommand.ExecuteNonQuery();
                result = Convert.ToInt32(returnValue.Value);
                myConnection.Close();
            }

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Napiste si pro to prislusne funkce ve vlastni tride a umistete je do adresare App_Code nebo zkompilujte do adresare Bin.

Treba funkce executeSQLnonQuery se muze volat nasledovne:

executeSQLnonQuery("name_procedure","param1, param2, param3", "param1_value,param2_value,param3_value","nazev_pripojeni_db")

dalsi varianta pro dotaz bez pouziti parametru (tzv. skladani stringu):

executeSQLnonQuery2("INSERT INTO table (column1) VALUES (value1)","nazev_pripojeni_db")

druhy priklad ma jista bezpecnostni nebezpeci (viz SQL injection), ale pro ucrite jednoduche dotazy, je pouzitelny.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Centralizovaného otevírání docílíte napsáním objektu, který se bude chovat jako datový kontext. Tedy objekt, který se bude starat o otevření připojení + nějakých dalších pomocných funkcí. Na jednom místě v něm pak můžete spravovat načítání připojovacího řetězce a parametrů připojení. Hezký příklad datového kontextu je technologie Linq2Sql, tam máte hlavní objekt datového kontextu a v něm jsou vygenerované všechny uložené procedury jako metody - jejich zavoláním se pomocí připojení drženého právě datovým kontextem vyvolá dotaz do databáze.

Pokud si napíšete vlastní (což je v případě psaní DL prakticky nutnost), tak ve výsledku ho můžete používat (pokud implementujete IDisposable) stejně jako v ukázce SqlConnection, například:

using (DatovyKontext dc = new DatovyKontext())
{
  result = dc.VyvolejProceduru1(clanek.Id,clanek.Name,clanek.DateOfIssue);

}

Při vytvoření (do konstruktoru) můžete inicializovat připojení a v Dispose metodě ho uzavřete. Do funkcí jako VyvolejProceduru1 pak implementujete funkční logiku.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback