• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak na podstawie nr_seryjny w tabeli device przypisywać id_u w tabeli value?

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
754 wizyt
pytanie zadane 9 maja 2023 w C# przez Kosinski_Sz. Nowicjusz (120 p.)

Jak na podstawie nr_seryjny w tabeli device przypisywać id_u w tabeli value?

Mam dwie tabelki. Do tabelki device wpisuje "ręcznie" urządzenia które będą odczytywać dane.  Tabelka value to wartości automatycznie pobierane z urządzeń co godzinę. (Nr seryjny nie mogę dać jako klucz główny bo nie jest to wartość int, a szkoda bo ułatwiło by mi to sprawę).I teraz: komputer wysyła mi nr_seryjny urządzeń device, oraz wartości do value w sposób automatyczny co godzinę. Jak napisać kod aby nr id_u (z device) wpisywał mi do id_u (w value) w spoób automatyczny na podstawie nr_seryjnego. Trudno to wytłumaczyć:) Niestety nigdy nie miałęm sytaucji że dane są pobierane automatycznie. Gdyby nr_seryjny był int i nie powtarzalny to nie było by problemu bo bym od niego zrobił klucz obcy. 

Dodawanie  do devicezrobiłem:

{
            string connection = "datasource=localhost;port=3306;username=root;password=";
            string iQuery = "Insert into device (id_u, nr_seryjny, dane_1, dane_2, dane_3) values ('" + this.textBoxid_u.Text + "', '" + this.textBoxnr_seryjny.Text + "', '" + this.textBoxdane_1.Text + "', '" + this.textBoxdane_2.Text + "', '" + this.textBoxdane_3.Text + "');";
            MySqlConnection dataBase = new MySqlConnection(connection);
            MySqlCommand cmd = new MySqlCommand(iQuery, dataBase);
            MySqlDataReader r;
            try
            {
                dataBase.Open();
                r = cmd.ExecuteReader();
                MessageBox.Show("Wartosc zostala dodana");               
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

Nie wiem jak przyporządkować wartość id_u (do value- klucz obcy) na podstawie numeru seryjnego:/

 

komentarz 9 maja 2023 przez Velta Maniak (52,790 p.)

Używaj parametrów w kwerendach, będzie wygodniej i to dobry nawyk, by zapobiec atakowi SQL injection:

var queryString = "INSERT INTO `device` (`id_u`, `nr_seryjny`, `dane_1`, `dane_2`, `dane_3`) VALUES (@idU, @nrSeryjny, @dane1, @dane2, @dane3)";
var command = new MySqlCommand(queryString, dataBase);

command.Parameters.Add("@idU", Convert.ToInt32(textBoxid_u.Text));
command.Parameters.Add("@nrSeryjny", textBoxnr_seryjny.Text);

command.Parameters.Add("@dane1", Convert.ToInt32(textBoxdane_1.Text));
command.Parameters.Add("@dane2", Convert.ToInt32(textBoxdane_2.Text));
command.Parameters.Add("@dane3", Convert.ToInt32(textBoxdane_3.Text));

 

1
komentarz 9 maja 2023 przez Nudzi mi się Gaduła (4,460 p.)
Czemu po prostu nie zrobisz dwóch zapytań? Najpierw wybrać id_u z devices a potem insert do value
komentarz 10 maja 2023 przez VBService Ekspert (256,320 p.)
edycja 10 maja 2023 przez VBService

Nr seryjny nie mogę dać jako klucz główny bo nie jest to wartość int, a szkoda bo ułatwiło by mi to sprawę

@Kosinski_Sz., zwróć uwagę na

Non-Numeric Primary Keys

 

... it is possible to have primary keys of other data types.

For example, let’s suppose we have a table that stores all the airports in the world. Some of the columns are airport_name, airport_city, airport_country, and airport_code. The airport code is a unique three-letter code assigned to each airport by an international aviation organization. We can use this non-numeric code as the primary key.

 

... Although non-numeric primary keys are technically feasible, numeric primary keys tend to perform better. Databases operate more quickly with numbers than strings. In some cases, when performance is critical, you should consider adding a numeric column to be used as an artificial primary key.

komentarz 10 maja 2023 przez VBService Ekspert (256,320 p.)
edycja 11 maja 2023 przez VBService

Zakładam, że PK w tabeli device ma ustawiony atrybut m. in. AUTO_INCREMENT, więc możesz go pominąć w zapytaniu i textBoxid_u jest niepotrzebny, bo w monecie wprowadzania danych baza danych sama nadaje, ustala prawidłowy PK dla danego wiersza dla tej tabeli.

 

zmiany w kodzie na wzór tego co sugeruje wyżej @Velta

string connection = "datasource=localhost;port=3306;username=root;password=";

string iQuery = "INSERT INTO device (nr_seryjny, dane_1, dane_2, dane_3) "
              + "VALUES (@nr_seryjny, @dane_1, @dane_2, @dane_3)";

MySqlConnection dataBase = new MySqlConnection(connection);

try
{
    dataBase.Open();

    MySqlCommand cmd = new MySqlCommand(iQuery, dataBase);
    cmd.Parameters.AddWithValue("@nr_seryjny", this.textBoxnr_seryjny.Text);
    cmd.Parameters.AddWithValue("@dane_1", Convert.ToInt32(this.textBoxdane_1.Text));
    cmd.Parameters.AddWithValue("@dane_2", Convert.ToInt32(this.textBoxdane_2.Text));
    cmd.Parameters.AddWithValue("@dane_3", Convert.ToInt32(this.textBoxdane_3.Text));

    int rowsAffected = cmd.ExecuteNonQuery();

    if (rowsAffected > 0)
    {
        MessageBox.Show("Wartość została dodana");
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    dataBase.Close();
}

 

komentarz 11 maja 2023 przez Kosinski_Sz. Nowicjusz (120 p.)
Bardzo Wam dziękuje za pomoc !!! Już wiem w czym rzecz !! Jeszcze raz dzięki !

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 366 wizyt
pytanie zadane 9 maja 2023 w C# przez JohnyBravo Nowicjusz (120 p.)
0 głosów
1 odpowiedź 459 wizyt
pytanie zadane 1 grudnia 2017 w C# przez BeFree Początkujący (380 p.)
0 głosów
0 odpowiedzi 925 wizyt

93,188 zapytań

142,204 odpowiedzi

322,027 komentarzy

62,515 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2581p. - dia-Chann
  2. 2537p. - Łukasz Piwowar
  3. 2528p. - Łukasz Eckert
  4. 2514p. - CC PL
  5. 2476p. - Tomasz Bielak
  6. 2445p. - Łukasz Siedlecki
  7. 2443p. - rucin93
  8. 2418p. - Michal Drewniak
  9. 2373p. - Marcin Putra
  10. 2367p. - Adrian Wieprzkowicz
  11. 2317p. - Mikbac
  12. 2156p. - Anonim 3619784
  13. 2016p. - Michał Telesz
  14. 1733p. - rafalszastok
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...