Změna connectionstring vytvořeného designerem   zodpovězená otázka

C#

Zdravím,

vytvořil jsem v designeru DataSet. Vygeneroval se mi samozřejmě connectionstring, ale já bych potřeboval, aby se měnil v závislosti na uživatelově nastavení (například se může měnit adresa databázového serveru, na který se vzdáleně přistupuje). Problém je, že connectionstring, která se ukládá v app.config je readonly.

Dá se tedy nějak dynamicky měnit za běhu aplikace tak, aby stále fungovaly funkce, které poskytuje designer?

Děkuji

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

Takže po chvíli bádání si odpovím sám. :)

Dá se to upravit tak, že se vytvoří zpracovatel události SettingsLoaded přímo ve třídě Settings. Asi nějak takhle:

private void SettingsLoadedEventHandler(object sender, System.Configuration.SettingsLoadedEventArgs e)
{
    this.PropertyValues["necoConnectionString"].PropertyValue = "dynamický connectionstring";
}

Do konstruktoru třídy Settings se přidá:

this.SettingsLoaded += this.SettingsLoadedEventHandler;

No to je něco! :)

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

To je ale prasárna z jednoho prostého důvodu: Nastavení pro aplikaci (k nimž patří i ConnectionStringy) jsou navržena pouze pro čtení a násilná změna tohoto chování se silně nedoporučuje. Je to z toho důvodu, že přístup k těmto nastavením by měl mít pouze správce a to ruční editací .exe.config souboru. Tato filozofie má své výhody i nevýhody, již se to zde několikrát řešilo. Mimochodem pokud jste změnil konstruktor třídy vytvořené designérem nebo do ní přidal jakýkoliv kód, s vysokou pravděpodobností se vám dříve nebo později smaže (pokud jste nepoužil Partial Class).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Partial Class jsem použil, takže designér mi to nezmění. Nicméně čekal jsem, že moje řešení není to pravé ořechové.

Ale jak jinak se tedy v praxi řeší aplikace tak, aby mi fungovaly výhody designéra (přetahování položek na datagridview s automatickým vytvořením těch binding-záležitostí apod.) a zároveň, aby mohl uživatel za běhu programu dynamicky měnit adresu serveru v connectionstringu? Nebo na to jdu úplně špatnou cestou a v praxi je to řešeno naprosto odlišně?

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

Jak už jsem řekl, nastavení na úrovni aplikace nejsou navržena k tomu aby je mohl měnit uživatel aplikace, ale pouze administrátor ruční editací (případně pomocí xcopy deploymentu) .exe.config souboru. Pokud vám toto nevyhovuje, můžete si implementovat vlastního providera pro konfigurační systém, který bude podporovat i změny nastavení na úrovni aplikace, ale z vlastní zkušenosti je to obrovská práce která se nevyplatí a musíte řešit spoustu problémů s tím spojených. Vizuální návrh databázových komponent se téměř nikde nepoužívá, je to příliš amatérské a není nad tím žádná kontrola jak se co vytvoří...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrá, mnohokrát děkuji za odpovědi.

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

Zdravim,

mohu mit prosbu ? jak tedy vytvorit pri startu aplikace

vytvorit pripojeni do databaze a zaroven naliknovani na Datagriedview, nebo listbox ci textbox ?

Ale hlavne jak vytvorit jak pouzivat patricne datatabelle.

Dekuji za odpoved

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

Návodů jak načítat data z databáze a zobrazit je v nějáké komponentě je na tomto vebu plno. Např. zde http://www.vbnet.cz/forum-tema--2834-slo...

(je to ve VB ale to by neměl být problém přepsat).

Pokud chcete zobrazit data v dataGridView pouze na konci nenapojíte dataTable na comboBox ale na váš dataGridView.

Jinak pokud by jste chtěl používat parametry, stored procedury na SQL server atd. tak všechny návody jsou v diskuzích na tomto webu (jak načítat data z databáze je poměrně častá otázka na kterou jsem jen já odpovídal minimálně 4x).

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