Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# - Pusty Combobox w C#, Visual Studio 2010

stawo123 06 Mar 2014 15:33 3630 37
  • #1 06 Mar 2014 15:33
    stawo123
    Poziom 7  

    Witam. Robie aplikcje do bazy danych w visual studio 2010 baze danych mam wms sql 2008 express. Problem polega na tym ze nie pokazują mi się nazwy tabel w Comboboxie. Pisząc kod wzorowałem sie na tutorialu z utube. Kompilując nie mam żadnych błędów tylko jest pusty combobox. Poniżej wklejam mówj kod z góry dziękuję za odpowiedz i jakakolwiek pomoc. Pozdrawiam

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0 29
  • Pomocny post
    #2 06 Mar 2014 15:44
    marcinj12
    Poziom 40  

    Próbowałeś wykonać to zapytanie w Management Studio, bezpośrednio na bazie? Czy zwraca oczekiwane wyniki?
    Jeśli tak, to czy łączysz się z dobrą bazą - możesz wybrać cokolwiek z jakiejkolwiek tabeli?

    0
  • #3 06 Mar 2014 16:31
    stawo123
    Poziom 7  

    Dając takie zapytanie W management studio
    select * from schema_tables where table_type='base table'

    (próbowałem w dwóch bazach w mojej i w bazie Northwind)
    wywala mi następujący błąd)

    Msg 208, Level 16, State 1, Line 1
    Invalid object name 'schema_tables'.

    gdy daje execute

    0
  • Pomocny post
    #4 06 Mar 2014 16:46
    marcinj12
    Poziom 40  

    To może używasz nieprawidłowej składni? Czy to nie jest aby polecenie dla SQL Server CE? Spróbuj z którymś np. stąd

    0
  • #5 06 Mar 2014 18:27
    stawo123
    Poziom 7  

    OK dzięki problem rozwiązany. Ale nie zamykam tematu ponieważ to nie koniec programu więc mogą byc kolejne pytania. Pozdrawiam :)

    Dodano po 31 [minuty]:

    Dodano po 42 [minuty]:

    Teraz pojawił się problem z wczytywaniem column odpowiadajacym tabelom do list boxa wstawiam taki kod
    cmd.CommandText = "SELECT * FROM information_schema.columns where Table_name='"+comboBox1.SelectedItem.ToString()+"";


    "SELECT * FROM information_schema to zapytanie działa w moim management studio

    próbowałem już kod zmieniac na kilka różnych spobów ale kolumny sie nie wczytują

    z góry dziękuje za odpowiedź i pomoc

    0
  • #6 06 Mar 2014 19:54
    marcinj12
    Poziom 40  

    Ponownie - próbowałeś wyświetlić tekst polecenia cmd.CommandText i przekleić je do SSMS? Debugowałeś kod metody loadcolumnname, czy wchodzi w dr.HasRows i dalej ?

    0
  • #7 06 Mar 2014 20:07
    stawo123
    Poziom 7  

    SELECT * FROM information_schema.columns to zapytanie wchodzi w ssms natomiast w visualu nie wyswietlaja sie mimo to kolumny w listboxie, natomiast jesli chodzi o "Debugowałeś kod metody loadcolumnname, czy wchodzi w dr.HasRows i dalej ?" to nie za bardzo wiem o co Ci chodzi. Wybacz ale jestem nowicjuszem w C# i ogolnie w programowaniu.

    0
  • #8 06 Mar 2014 20:14
    marcinj12
    Poziom 40  

    Zmień metodę na:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Komunikat z pierwszego okna przeklep dokładnie do SSMS i sprawdź, czy zwraca rezultat.
    Potem sprawdź, czy pojawi się okienko z drugim i ew. trzecim komunikatem.

    0
  • #9 06 Mar 2014 21:06
    stawo123
    Poziom 7  

    Chodzi Ci o ten komunikat tak? SELECT * FROM information_schema.columns where Table_name, jeśli tak to on nie działa w smss, ale działa ten SELECT * FROM information_schema.columns


    zmienilem kod na twój

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    i również sie kolumny nie wyswietlaja a żadnych błedów nie zwraca....

    Dodano po 42 [minuty]:

    Jakieś nowe propozycje? bo juz nie mam pojęcia co robic?
    z góry thx

    W przyszłości proszę umieszczać kod w znacznikach syntax, opcja Listing kodu. Posty poprawiłem [adamas-nt]

    0
  • #10 07 Mar 2014 09:14
    marcinj12
    Poziom 40  

    Zrobiłeś dokładnie tak?

    Cytat:
    Komunikat z pierwszego okna przeklep dokładnie do SSMS i sprawdź, czy zwraca rezultat.
    Musisz podać nazwę tabeli, to drugie zapytanie
    stawo123 napisał:
    cmd.CommandText = "SELECT * FROM information_schema.columns='"+comboBox1.SelectedItem.ToString()+"";
    jest bez sensu, do jakiej kolumny to porównanie robisz?

    0
  • #11 07 Mar 2014 11:27
    stawo123
    Poziom 7  

    cmd.CommandText = "SELECT data_type * FROM information_schema.columns where table_name='"+comboBox1.SelectedItem.ToString()+"";
    w tutorialu gość daje takie zapytanie, ja je daje i mi nie dziala modyfikowałem je na różne sposoby również nie działa o to owy tutorial

    http://www.youtube.com/watch?v=O_kBScfzl-w

    gościowi to działa w ten sposób ze po rozwinięciu tabel w comboboxie i kliknieciu wybranej w listboxie pojawiają mu sie nazwy kolumn tej tabeli któa wybrał.
    Pozdro

    dodam ze to jest około 14 minuty tutora

    0
  • #12 07 Mar 2014 14:16
    marcinj12
    Poziom 40  

    No tak to do niczego nie dojdziemy... Masz tutorial, masz kod tego zapytania - tylko je przepisać. W tutorialu w 14:54 jest SELECT column_name, skąd wziąłeś to data_type?

    W poście #8 prosiłem, żebyś dokładnie taki kod wklepał i napisał, czy dostajesz wiadomości z powiadamianiami, o oprócz tego kod z pierwszego okienka przeklepał do SSMS. Zrób to i napisz jakie komunikaty dostajesz.

    0
  • #13 07 Mar 2014 15:28
    stawo123
    Poziom 7  

    SELECT column_name * FROM information_schema.columns where table_name
    jesli chodzi ci o to zebym to przeklepał do smss to jest taki komunikat
    Msg 156, Level 15, State 1, Line 1
    Incorrect syntax near the keyword 'FROM'.

    sorry ale nie wiem co to znaczy okienko. jak pisałem jestem nowicjusz w tej dziedzinie.
    z góry dzięki :)

    0
  • #14 07 Mar 2014 15:40
    marcinj12
    Poziom 40  

    Okienko, komunikat, messagebox - rozumiem że nowicjusz, ale...
    Nie możesz dostać takiego komunikatu.
    Miałeś wpisać komendę:

    Kod: css
    Zaloguj się, aby zobaczyć kod

    Jak uruchamiasz program co masz na pierwszym wyskakującym komunikcie? To nie może być:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #15 07 Mar 2014 15:49
    stawo123
    Poziom 7  

    no i taka wpisuje jak podałeś

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;




    namespace narzedzia_scierne
    {
    public partial class Form1 : Form
    {
    SqlConnection cn = new SqlConnection();
    SqlCommand cmd = new SqlCommand();
    SqlDataReader dr;

    public Form1()
    {
    InitializeComponent();
    }
    private void loadtablename()
    {
    comboBox1.Items.Clear();
    cmd.CommandText = "SELECT * FROM information_schema.tables";
    cn.Open();
    dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {
    while (dr.Read())
    {
    comboBox1.Items.Add(dr["Table_name"].ToString());
    }
    }
    cn.Close();
    }

    private void loadcolumnname()
    {
    listBox1.Items.Clear();
    cmd.CommandText = "SELECT * FROM information_schema.columns where Table_name='"+comboBox1.SelectedItem.ToString()+"";
    MessageBox.Show(cmd.CommandText);
    cn.Open();
    dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {
    MessageBox.Show("Są wiersze");
    while (dr.Read())
    {
    listBox1.Items.Add(dr[0].ToString());
    }
    }
    cn.Close();
    }



    private void Form1_Load(object sender, EventArgs e)
    {
    cn.ConnectionString = @"Data Source=JAKUB-PC\SQLEXPRESS;Initial Catalog=Narzedzia_scierne;Integrated Security=True";
    cmd.Connection = cn;
    loadtablename();



    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
    if (comboBox1.SelectedIndex!=-1)
    {
    loadcolumnname();
    }

    }
    }
    }
    Kod: csharp
    Zaloguj się, aby zobaczyć kod




    i zadne błedy nie wyskakuja

    0
  • #16 07 Mar 2014 19:17
    marcinj12
    Poziom 40  

    Podejrzewam, że nie masz podpiętego zdarzenia comboBox1_SelectedIndexChanged pod kontrolkę. Sprawdź ww właściwościach comboboxa, czy jest tam podpięte to zdarzenie, jeśli nie - wybierz je z listy.

    0
  • #17 07 Mar 2014 19:21
    stawo123
    Poziom 7  

    a jak to zrobic?

    0
  • Pomocny post
    #18 07 Mar 2014 19:26
    marcinj12
    Poziom 40  

    Po zaznaczeniu comboboxa, w okienku properties, piorunek, pod zdarzeniem selectedIndexChanged

    0
  • #20 07 Mar 2014 19:33
    marcinj12
    Poziom 40  

    ...to jeszcze mi powiedz gdzie masz to .views w zapytaniu w tutorialu...

    0
  • #21 07 Mar 2014 19:38
    stawo123
    Poziom 7  

    sorry to views było moim kombinowaniem ale jak je usuwam jest to samo

    czy może być to spowodowane faktem ze w bazie oprócz tabel mam również dodane
    widoki i procedury oraz diagram poniżej screen

    0
  • #22 07 Mar 2014 19:46
    marcinj12
    Poziom 40  

    Nie widzę dokładnie, ale czy nie masz niedomkniętego apostrofa w tym zapytaniu?

    0
  • #24 07 Mar 2014 20:01
    marcinj12
    Poziom 40  

    Słuchaj, usuń to całe zapytanie i przepisz DOKŁADNIE to samo co masz w tutorialu który podajesz.

    0
  • #26 07 Mar 2014 20:14
    stawo123
    Poziom 7  

    działa usunałem * i jest git dzieki

    Dodano po 23 [sekundy]:

    ale to nei koniec programu więc bede jeszcze spamował:)

    0
  • #27 09 Mar 2014 21:19
    stawo123
    Poziom 7  

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;




    namespace narzedzia_scierne
    {
    public partial class Form1 : Form
    {
    SqlConnection cn = new SqlConnection();
    SqlCommand cmd = new SqlCommand();
    SqlDataReader dr;

    public Form1()
    {
    InitializeComponent();
    }
    private void loadtablename()
    {
    comboBox1.Items.Clear();
    cmd.CommandText = "Select * from information_schema.tables";
    cn.Open();
    dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {
    while (dr.Read())
    {
    comboBox1.Items.Add(dr["Table_name"].ToString());
    }
    }
    cn.Close();
    }

    private void loadcolumnname()
    {
    for (int i = 0; i < listBox1.Items.Count; i++)
    {
    listBox1.SelectedIndex = i;
    string columnname = listBox1.SelectedItem.ToString();
    listBox1.Items.Clear();
    cmd.CommandText = "select column_name from information_schema.columns where table_name='" + comboBox1.SelectedItem.ToString() + "'and column_name='" + columnname.ToString();

    cn.Open();
    dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {

    while (dr.Read())
    {
    listBox1.Items.Add(dr[0].ToString());
    }
    }
    cn.Close();
    }
    }

    private void loaddatatype()
    {
    if (listBox1.Items.Count > 0)
    {
    for (int i = 0; i < listBox1.Items.Count; i++)
    {
    listBox1.SelectedIndex = i;
    string columnname = listBox1.SelectedItem.ToString();
    listBox2.Items.Clear();
    cmd.CommandText = "select data_type from information_schema.columns where table_name='" + comboBox1.SelectedItem.ToString() + "'and column_name'" + columnname.ToString() + "'";

    cn.Open();
    dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {

    while (dr.Read())
    {
    listBox2.Items.Add(dr[0].ToString());
    }
    }
    cn.Close();
    }

    }
    }


    private void Form1_Load(object sender, EventArgs e)
    {
    cn.ConnectionString = @"Data Source=JAKUB-PC\SQLEXPRESS;Initial Catalog=Narzedzia_scierne;Integrated Security=True";
    cmd.Connection = cn;
    loadtablename();



    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
    if (comboBox1.SelectedIndex != -1)
    {
    loadcolumnname();
    loaddatatype();

    }

    }



    private void listBox2_Click(object sender, EventArgs e)
    {
    ListBox l = sender as ListBox;
    if (l.SelectedIndex != -1)
    {
    listBox1.SelectedIndex = l.SelectedIndex;
    listBox2.SelectedIndex = l.SelectedIndex;

    }
    }




    }
    }
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    błędów nie wywala ale znowu po daniu na tabele nie pokazują się kolumny i w drugiej list boxie typy danych sie również nie pokazuja , a wczesniej kolumny sie pokazywyały, po dopisaniu kawałka kodu znowu nie działą

    0
  • #28 09 Mar 2014 22:09
    marcinj12
    Poziom 40  

    Wybacz, ale mam wrażenie że w ogóle nie masz pojęcia co ten kod robi? Wiem, że jesteś nowicjuszem, ale jak piszesz jakiś kod to wypada przynajmniej wiedzieć, co robi linijka którą piszesz...
    Masz dwa, a właściwie trzy głupie błędy w zapytaniu metody loadcolumnname. VS powinien to wyrzucić w jakimś błędzie przy próbie wykonania tego zapytania.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    Po pierwsze -brak spacji pomiędzy apostrofem a słowem and. Po drugie - brak zamykającego apostrofa. Po trzecie - to zapytanie jest bez sensu w kontekście metody loadcolumnname. Miałeś dobrze, czemu to zmieniłeś na takie cudo? Próbujesz pobrać nazwy wszystkich kolumn z tabeli, podając jako parametr nazwę jednej kolumny? Jaki to ma sens?

    Tak samo bez sensu jest ta cała pętla po listBox1 - pobierasz kolejne nazwy kolumn z listboxa, wstawiasz je do zapytania, potem czyścisz tego samego listboxa i wypełniasz wynikiem tego zapytania?
    Jeśli dobrze rozumiem chcesz uzyskać nawy i typy kolumn z danej tabeli. Napiszę Ci tym razem jak to powinno wyglądać:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    Taka mniej więcej przeróbka Twojego kodu. Metodę LoadColumnNamesAndTypes podpinasz pod zdarzenie comboBox1_SelectedIndexChanged zamiast tamtych dwóch. Niestety, nie mam SQL Servera żeby przetestować składnię, ale zakładam że jest prawidłowa.

    0
  • #29 09 Mar 2014 22:31
    stawo123
    Poziom 7  

    ... ale ja z tutoriala to pisze...

    0
  • #30 09 Mar 2014 22:53
    marcinj12
    Poziom 40  

    Albo niedokładnie, albo ja czegoś nie widzę - w tym tutorialu facet pisze wszystko w loaddatatype, loadcolumnname zostawił bez zmian (15:45 i dalej)... Nie chce mi się całego oglądać...
    Moim skromnym zdaniem - jakiś dziwny jest ten tutorial. Dzisiaj każdy może coś w sieci umieścić, proponuję poszukać innego. W tym są jakieś dziwne akcje na okrętkę robione, do tego facet nie przestrzega zasad - wszystkie nazwy metod czy zmiennych pisze małymi literami. Do tego jak patrzę pod koniec tego tutariala wyrzuca mu jakieś wyjątki, facet robi błędy, poprawia je później - tak się tutorialów nie robi...

    Ale , Twoja decyzja... Jak już z tego korzystasz to rób dokładnie to samo co on.

    0
  Szukaj w 5mln produktów