blad przy sciaganiu danych z sql server

0

witam
dopiero probuje swoich sil z c# i napotkalem problem. mianowicie mam taki kawalek kodu:

            String txt = comboBox1.Text;
            String connectionString = "server=localhost\\SQLEXPRESS;" + "Trusted_Connection=yes; database=test";
            String commandString = "Select grupa from student where simie='"+txt+"'";
            SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);
            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet, "test");
            DataTable dataTable = dataSet.Tables[0];
            DataRow dataRow = dataTable.Rows[0];
            textBox1.Text = dataRow["grupa"].ToString();

po uruchomieniu wszystko jest ok ale przy zamknieciu wyskakuje blad:
"An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll

Additional information: Brak wiersza w pozycji 0."
i debuger wskazuje na wiersz:
DataRow dataRow = dataTable.Rows[0];
ma ktos moze jakis pomysl ?

0

Najwyrazniej nie ma wiersza o numerze 0, czyli najprawdopodobniej zapytanie zwrocilo 0 wierszy w wyniku. Zwroc tez uwage na mozliwosc sql injection w przypadku Twojego kodu.

0

dzieki za odpowiedz.
rzeczywiscie sa przypadki ze sql nie zwraca nic.
pozdrawiam

0

String txt = comboBox1.Text;
String connectionString = "server=localhost\SQLEXPRESS;" + "Trusted_Connection=yes; database=test";
String commandString = "Select grupa from student where simie='"+txt+"'";
SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet, "test");
DataTable dataTable = dataSet.Tables[0];
DataRow dataRow = dataTable.Rows[0];
textBox1.Text = dataRow["grupa"].ToString();

Źle się do tego zabierasz. Poczytaj o metodzie ExecuteScalar();

0
Deti napisał(a)

Źle się do tego zabierasz. Poczytaj o metodzie ExecuteScalar();

ExecuteScalar() po warunkiem ze zwroci 1 wartosc, a po jego zapytaniu nie musi tak byc;p
dam1en poczytaj tez o parametrach.

pozdraiwam

0

Nie widzę tu więcej niż 1 wynik

DataTable dataTable = dataSet.Tables[0];
DataRow dataRow = dataTable.Rows[0];
textBox1.Text = dataRow["grupa"].ToString();

0
Deti napisał(a)

Nie widzę tu więcej niż 1 wynik

String commandString = "Select grupa from student where simie='"+txt+"'";

mój błąd, oparłem się na zapytaniu, a nie popatrzyłem niżej;p (zmęczenie) ;-P
w tym przypadku faktycznie najlepiej użyć ExecuteScalar()

pozdrawiam

0

Dzieki wszystkim za odpowiedz.
dopiero sie zabieram za c# i za bazy. przyklad wzialem z ksiazki i na tym sie opieram. widze jednak ze praca z helpem bedzie najlepsza. pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1