2013-06-06 18 views
6

Ten jest tajemnicą dla mnie, wiem, kod Wziąłem ją od innych, w moim przypadku DataTable zwraca pustyFill DataTable z bazy danych SQL Server

conSTR jest ciąg połączenia, ustawiony jako globalny ciąg

public DataTable fillDataTable(string table) 
    { 
     string query = "SELECT * FROM dstut.dbo." +table; 

     SqlConnection sqlConn = new SqlConnection(conSTR); 
     sqlConn.Open(); 
     SqlCommand cmd = new SqlCommand(query, sqlConn); 

     DataTable dt = new DataTable(); 
     dt.Load(cmd.ExecuteReader()); 
     sqlConn.Close(); 
     return dt; 
    } 

EDIT 1
Sensem jest później pokazać tę tabelę w DataGrid widzenia na TabControl, oto jest pytanie na tym displaying multiple datatable in tabcontrol C#

Tutaj po prostu pokazać to mi pustą DataGridView

EDIT 2
Próbowałem ich wszystkich, kiedy próbuję wyświetlić tabelę, DataGridView jest pusta, mieć odpowiednią ilość wierszy, ale teraz cenią

+0

Jaka jest wartość tabeli zmiennych? – Steve

+2

Czy tabela zawiera zapisy? – Freelancer

+1

@Steve table = nazwa tabeli z bazy danych (jest ich kilka) – iakovl2

Odpowiedz

2

Spróbuj z następujących powodów:

public DataTable fillDataTable(string table) 
    { 
     string query = "SELECT * FROM dstut.dbo." +table; 

     SqlConnection sqlConn = new SqlConnection(conSTR); 
     sqlConn.Open(); 
     SqlCommand cmd = new SqlCommand(query, sqlConn); 
     SqlDataAdapter da=new SqlDataAdapter(cmd); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     sqlConn.Close(); 
     return dt; 
    } 

HopeIts pomocna.

+2

Byłbym nieco zaskoczony, gdyby to zmieniło cokolwiek; Warto spróbować, ale metoda "DataTable.Load" również działa dobrze. Ponadto: dlaczego "ExecuteNonQuery" to? nie powinieneś w ogóle wykonywać 'cmd' * * - adapter to zrobi. –

+0

@MarcGravell może być. Nie znałem powyżej stylu kodowania. Zawsze koduję w tym stylu. Więc zasugerowałem ten jeden. – Freelancer

+0

@Freelancer nadal nie jest dobry, ekran jest pusty – iakovl2

27

Jeśli zmienna table zawiera nieprawidłowe znaki (takie jak spacja), należy dodać nawiasy kwadratowe wokół zmiennej.

public DataTable fillDataTable(string table) 
{ 
    string query = "SELECT * FROM dstut.dbo.[" + table + "]"; 

    using(SqlConnection sqlConn = new SqlConnection(conSTR)) 
    using(SqlCommand cmd = new SqlCommand(query, sqlConn)) 
    { 
     sqlConn.Open(); 
     DataTable dt = new DataTable(); 
     dt.Load(cmd.ExecuteReader()); 
     return dt; 
    } 
} 

przy okazji, być bardzo ostrożnym z tego rodzaju kodu, ponieważ jest otwarty na SQL Injection. Mam nadzieję, że nazwa tabeli nie pochodzi od użytkownika input

+0

pochodzi z listy, którą utworzę, nie ma tu nieprawidłowej opcji. wciąż mam ten sam problem. – iakovl2

+0

@ iakovl2 Szkoda, że ​​to nie pomogło - ale proszę ucz się od Steve'a użycia 'use' tutaj; poprawne użycie 'using' jest rzeczywiście *** naprawdę *** ważne. Gdybym był wybredny, wspomniałbym, że Steve brakowało jednego (wokół czytnika) ... ale oczywiście nie jestem wystarczająco dobry, aby wspomnieć o tym przy okazji ...; p –

+0

@MarcGravell, ale tutaj czytelnik jest przekazywany bezpośrednio do ładunek. Czy masz na myśli, że lepiej jest podzielić linię na dwie, aby zastosować użycie do obiektu SqlDataReader? – Steve

Powiązane problemy