Sloupec z tabulky v databázi v comboboxu   zodpovězená otázka

VB.NET, WinForms, Databáze

Zdravím pánové,

napřed bych chtěl poděkovat za výborné stránky a fórum, mnohokrát jsem zde již našel co jsem potřeboval nebo chtěl vědět.

Nyní k mým dotazům:

Pracuji s VB.NET 2008 EE a SQL Serverem CE

Chtěl bych vědět, jestli je možné načíst obsah sloupce z tabulky v databázi(*.sdf) do comboboxu. Zkoušel jsem to na základě článku Tomáš Hercega, kde data načítal do kompnenty DataGridView, ale nepodařilo se mi to a nic takového jsem zde nenašel.

Zatím jedinou možnost jsem našel v načtení tabulky do DataGridViewu a odtud do comboboxu, ale toto je řešení oklikou a raději bych se mu vyhnul.

Můj druhý dotaz se týká compact edice SQL serveru a omlouvám se pokud se nehodí do této části fóra, ale dospěl jsem k němu v souvislosti s předchozím dotazem. Zajímalo by mě jak to je s připojením se do jedné databáze z více aplikací, resp. více instancí jedné aplikace. Omylem se mi to totiž povedlo a přístup fungoval normálně. V čem je tedy háček?

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

Dobrý den, k prvnímu dotazu:

Já data z tabulky do comboboxu načítám takto:

        Dim dtCiselnik As DataTable = New DataTable


'zde bude kód kterým načtete data z SQL serveru do dataTable

        me.ComboBox1.DataSource = dtCiselnik  'předáte combu číselník
        me.ComboBox1.DisplayMember = "sloupec_hodnot" 'zadáte název sloupce z SQL serveru kde jsou hodnoty které se mají v combu objevit
        me.ComboBox1.ValueMember = "id" 'ID mám v tabulce na SQL serveru jako primární klíč.

ValueMember se Vám bude hodit pokud budete mít mezi tabulkymi relace na ID. Uživatel tedy v combu vybere nějákou hodnotu, ale vy nebudete zpátky na SQL server posílat její název, ale pouze její ID které uložíte tam kam potřebujete.

Co se týká druhého dotazu, tak zde nějáká omezení jsou. Bohužel neznám všechny, ale jsou to omezení typu, že u této edice nelze použít PC které má více procesorů, velikost databáze nesmí překročit 2GB (nebo 4 teď nevím, ale každopádně by jste se musel dost snažit aby jste této hodnoty dosáhl:) atd.

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

Děkuji za odpověď, bohužel si stále nevím rady, hlavně pokud jde o to načtení dat do dataTablu. V úvodu jsem se nezmínil, že moje zkušenosti s databázema jsou malé, přisuzuji to tedy své neznalosti, proto bych chtěl požádat o bližší vysvětlení. Postup, který jsem dosud používal u DataGridViewu - vytvoření SqlCeConnection, otevření databáze, vytvoření SqlCeCommandu a jeho přiřazení pomocí ExecuteResultSet do dataSource komponenty DataGridView, mi přijde jednoduchý a docela jiný, než s použitím dataTablu, zvlášť když se dataTable a resultSet vzájemně "nepoperou". Jde o řešení pro compact edici SQL serveru nebo je v tom vůbec nějaký rozdíl? Prosím tedy ještě jednou o bližší vysvětlení nebo odkázání na materiál s problematikou (pokud možno český).

U druhého dotazu by mě spíše zajímalo omezení na počet aplikací k jedné databázi připojených a jestli nemůže dojít k "pomíchání" dat, ikdyž jak jsem si sám ověřil, pokud v jedné instanci aplikace změním nějaká dat, po refreshi v druhé instanci se toto ihned projeví. O velikost databáze obavy nemám, pochybuji že se dostanu vůbec na 100MB.

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

Celé by to mohlo vypadat něják takto:

Sub naplnCombo()

Dim connectString As String = "sem zadáte connectionString"
Dim spojeni As SqlClient.SqlConnection = New SqlClient.SqlConnection(connectString)
Dim dtSeznam As DataTable = New DataTable
Dim dbadapter As New SqlClient.SqlDataAdapter()

spojeni.Open()


dbadapter.SelectCommand = New SqlClient.SqlCommand("SELECT ID,hodnota FROM my_table", spojeni)
dbadapter.Fill(dtSeznam)


spojeni.Close()




me.ComboBox1.DataSource = dtSeznam
me.ComboBox1.DisplayMember = "hodnota" 
me.ComboBox1.ValueMember = "id"

End Sub

ale neručím za 100% správnost syntaxe, píšu to v poznámkovém bloku.

Jinak co se týká omezení připojení nevím, snad poradí někdo jiný.

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

Díky moc, funguje, přesně jak jsem chtěl, jen bylo v mém případě pro použití s Compact edicí třeba změnit SqlClient.SqlDataAdapter() na SqlCeDataAdapter a SqlClient.SqlCommand na SqlCeCommand, ale s tím už by si určitě každý poradil...

Ještě jednou díky...

Pokud by někdo měl ještě něco k těm omezením Compact Edice, dejte prosím vědět, rád bych věděl na co si dát pozor. Nevím jestli kvůli tomu zakládat nové téma...

nahlásit spamnahlásit spam 1 / 1 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