sprawdzenie czy rekord istnieje w bazie

nick
2010-11-16 18:16
nick
0

Witam,

w jaki sposób powinien być skonstruowany kod c# aby sprawdzić czy dany rekord istnieje w tabeli ?

np mam tabela1 z polami data i godzina

i teraz chce sprawdzić czy dane wprowadzane z datatimepicker (data) oraz datatimepicker1 (godzina) już istnieją. Chodzi mi o to aby nie było rekordu który zawiera taką samą godzinę i datę. kompletnie nie wiem jak się do tego zabrać ;/ z góry dzięki za pomoc.

Pozostało 580 znaków

nick
2010-11-16 18:16
nick
0

zapomniałem dodać, że chodzi o bazę SQL

Pozostało 580 znaków

2010-11-16 18:46
Moderator

Rejestracja: 12 lat temu

Ostatnio: 39 minut temu

Lokalizacja: Wrocław

0

Zapytanie SELECT...WHERE sprawdzające czy rekord o danych parametrach istnieje?


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

nick
2010-11-16 18:59
nick
0

no tak myślałem ale nie bardzo wiem jak to zrobić w kodzie...

powiedzmy mam taki kod, czy on się nadaję ? i jak dokładnie sprecyzować zapytanie select jesli pytam o tabele1 i kolumny data i godzina ?

wybaczcie ale siedzę już nad tym pół dnia i nie daję rady ;/


 try
            {
                SqlCommand dodaj = new SqlCommand();
                dodaj.Connection = new SqlConnection(ConfigurationSettings.AppSettings["conn"]);
                dodaj.CommandText = "";

                dodaj.Connection.Open();
                dodaj.ExecuteNonQuery();
                dodaj.Connection.Close();

            }
            catch (Exception ex)
            {
                MessageBox.Show("Podana data i godzina już istnieje");

            }

Pozostało 580 znaków

2010-11-16 19:56
Moderator

Rejestracja: 12 lat temu

Ostatnio: 39 minut temu

Lokalizacja: Wrocław

0

Czyli Twoim problemem nie jest C# tylko SQL.
Jako CommandText można wstawić np.

SELECT COUNT(*) FROM Tabela WHERE Data=wartość_daty AND Godzina=wartość_godziny

A następnie wywołać nie przez ExecuteNonQuery lecz przez ExecuteScalar i przypisać do zmiennej typu int. Jeśli będzie większa niż 0, to znaczy, że rekord o takich atrybutach istnieje. Jeśli nie, to trzeba będzie napisać drugie zapytanie, które wstawi nowy. (Oczywiście można napisać jedno zapytanie z ifem, który wstawi tylko jeśli rekord nie istnieje.)


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

nick
2010-11-16 22:00
nick
0

kurde z c# też mam problem ;p

to może coś takiego ?
ma to sens ?


int zmienna;

                    SqlCommand dodaj = new SqlCommand();
                    dodaj.Connection = new SqlConnection(ConfigurationSettings.AppSettings["polaczbaza"]);
                    dodaj.CommandText = "SELECT COUNT(id) FROM c_timetable WHERE date=" + cb_data.Text + " AND godz=" + t_godzina.Text + "";

                    dodaj.Connection.Open();
                    dodaj.ExecuteScalar();
                    dodaj.Connection.Close();

                    SqlDataReader sdr = dodaj.ExecuteReader();
                    sdr.Read();
                    zmienna = sdr.GetInt32(0);

                    dodaj.Connection.Close();

                if (zmienna == 0)
                {
                    MessageBox.Show("jest w bazie");
                }
                else
                    MessageBox.Show("nie ma");

Pozostało 580 znaków

nick
2010-11-16 22:02
nick
0

poprawka:


 int zmienna;

                    SqlCommand dodaj = new SqlCommand();
                    dodaj.Connection = new SqlConnection(ConfigurationSettings.AppSettings["polaczbaza"]);
                    dodaj.CommandText = "SELECT COUNT(id) FROM c_timetable WHERE date=" + cb_data.Text + " AND godz=" + t_godzina.Text + "";

                    dodaj.Connection.Open();
                    dodaj.ExecuteScalar();

                    SqlDataReader sdr = dodaj.ExecuteReader();

                    zmienna = sdr.GetInt32(0);

if (zmienna == 0)
                {
                    MessageBox.Show("jest w bazie");
                }
                else
                    MessageBox.Show("nie ma");

                    dodaj.Connection.Close();

Pozostało 580 znaków

2010-11-17 10:27

Rejestracja: 11 lat temu

Ostatnio: 3 lata temu

0

nie dosc ze problem z sql to chyba jeszcze z czytaniem!
co napisal somekind?
"... wywołać ... przez ExecuteScalar i przypisać do zmiennej typu int" - gdzie to masz?
"Jeśli będzie większa niż 0, to znaczy, że rekord o takich atrybutach istnieje" - gdzie to masz?
po co ci ten reader? bylo gdzies ze masz uzyc DataReadera???

"if (zmienna == 0)" - popatrz na zapytanie sql, czy na pewno jesli jest zero to znaczy ze rekord istnieje

edytowany 1x, ostatnio: massther, 2010-11-17 10:29

Pozostało 580 znaków

nick
2010-11-17 19:46
nick
0

kurde...

tak ?

SqlCommand dodaj = new SqlCommand();
            dodaj.Connection = new SqlConnection(ConfigurationSettings.AppSettings["polaczbaza"]);
            dodaj.CommandText = "SELECT COUNT(date) FROM c_timetable WHERE date=" + cb_data.Text + "";

            dodaj.Connection.Open();

            int zmienna = (int)dodaj.ExecuteScalar();

            if (zmienna > 0)
            {
                MessageBox.Show("jest w bazie");
            }
            else
                MessageBox.Show("nie ma");

            dodaj.Connection.Close();

znowu siedziałem nad tym 2 godizny ;/ czytałem o zmiennych itp. tylko teraz mam problem, bo wyskakuje błąd:

podświetla linie: int zmienna = (int)dodaj.ExecuteScalar();
Operand type clash: date is incompatible with int

pomoże ktoś ?

Pozostało 580 znaków

nick
2010-11-17 20:08
nick
0

hmm zmieniłem w bazie z typu "date" na datetime i poszło jakoś..

tylko teraz nie wiem jak skonstruować if ...


int zmienna = (int)dodaj.ExecuteScalar();

            if (zmienna > 0)
            {
                MessageBox.Show("jest w bazie");
            }
            else
                MessageBox.Show("nie ma");

ciągle mi pokazuje, że nie ma ... może to kwestia ustawienia w datatimepicker bo mi się zmienił format daty w bazie z: 21-01-2009 na 21-01-2009 00:00 i teraz nie wiem o co chodzi ;/

Pozostało 580 znaków

nick
2010-11-17 20:17
nick
0

dobra wszystko śmiga :)

dzięki wszystkim za pomoc.

 SqlCommand dodaj = new SqlCommand();
            dodaj.Connection = new SqlConnection(ConfigurationSettings.AppSettings["polaczbaza"]);
            dodaj.CommandText = "SELECT COUNT(*) FROM c_timetable WHERE date= '" + cb_data.Text + "' AND godz= '" + t_godzina.Text + "'";

            dodaj.Connection.Open();

            int zmienna = (int)dodaj.ExecuteScalar();

            if (zmienna > 0)
            {
                MessageBox.Show("jest w bazie");
            }
            else
                MessageBox.Show("nie ma");

            dodaj.Connection.Close();

Pozostało 580 znaków

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