Jak wyciągnąć wartość z Comboxa?

0
string zapytanie1 = @"INSERT into klient VALUES (@id_ucznia
                                                               ,@id_nauczyciela
                                                               ,@id_przedmiotu
                                                               ,@id_rodzaju_oceny
                                                               ,@ocena
                                                               ,@data_wystawienia_oceny)";
            zapytanie.CommandText = zapytanie1;
            zapytanie.Connection = connect;


            SqlParameter id_ucznia = new SqlParameter();
            id_ucznia.ParameterName = "@id_ucznia";
            id_ucznia.DbType = System.Data.DbType.String;
            id_ucznia.Value = txtUczen.SelectedIndex.ToString();
            zapytanie.Parameters.Add(id_ucznia);

            SqlParameter id_nauczyciela = new SqlParameter();
            id_nauczyciela.ParameterName = "@id_nauczyciela";
            id_nauczyciela.DbType = System.Data.DbType.String;
            id_nauczyciela.Value = txtUczen.SelectedIndex.ToString();
            zapytanie.Parameters.Add(id_nauczyciela);


            SqlParameter id_przedmiotu = new SqlParameter();
            id_przedmiotu.ParameterName = "@id_przedmiotu";
            id_przedmiotu.DbType = System.Data.DbType.String;
            id_przedmiotu.Value = txtUczen.SelectedIndex.ToString();
            zapytanie.Parameters.Add(id_przedmiotu);


            SqlParameter ocena = new SqlParameter();
            ocena.ParameterName = "@ocena";
            ocena.DbType = System.Data.DbType.String;
            ocena.Value = txtOcena;
            zapytanie.Parameters.Add(ocena);



            SqlParameter data_wystawienia_oceny = new SqlParameter();
            data_wystawienia_oceny.ParameterName = "@data_wystawienia_oceny";
            data_wystawienia_oceny.DbType = System.Data.DbType.String;
            data_wystawienia_oceny.Value = data;
            zapytanie.Parameters.Add(data_wystawienia_oceny);
            
         
            zapytanie.ExecuteNonQuery();

Witam serdecznie,

To moje początki programowania na zaliczenie przedmiotu mam do zrobienia projekt.

Proszę pomóżcie mi.
Nie wiem dlaczego ten Insert mi nie działa "Nie można przekonwertować wartości parametru z TextBox na String." to wyrzuca mi VisualStudio
Proszę również o podpowiedź, czy do daty( wartość typu date) i ocena ( wartość typu int) powinnam narzucić jakieś formatownia

dodanie znacznika <code class="csharp"> - @furious programming

0

I jeszcze, id_ucznia, id_przedmiotu, Id_nauczyciela to są wartości wybierane z comboboxa

0
string zapytanie1 = @"INSERT into oceny VALUES (@id_ucznia
                                                               ,@id_nauczyciela
                                                               ,@id_przedmiotu
                                                               ,@id_rodzaju_oceny
                                                               ,@ocena
                                                               ,@data_wystawienia_oceny)";
            zapytanie.CommandText = zapytanie1;
            zapytanie.Connection = connect;


            SqlParameter id_ucznia = new SqlParameter();
            id_ucznia.ParameterName = "@id_ucznia";
            id_ucznia.DbType = System.Data.DbType.String;
            id_ucznia.Value = txtUczen.SelectedIndex.ToString();
            zapytanie.Parameters.Add(id_ucznia);

            SqlParameter id_nauczyciela = new SqlParameter();
            id_nauczyciela.ParameterName = "@id_nauczyciela";
            id_nauczyciela.DbType = System.Data.DbType.String;
            id_nauczyciela.Value = txtNauczyciel.SelectedIndex.ToString();
            zapytanie.Parameters.Add(id_nauczyciela);


            SqlParameter id_przedmiotu = new SqlParameter();
            id_przedmiotu.ParameterName = "@id_przedmiotu";
            id_przedmiotu.DbType = System.Data.DbType.String;
            id_przedmiotu.Value = txtPrzedmiot.SelectedIndex.ToString();
            zapytanie.Parameters.Add(id_przedmiotu);

            SqlParameter id_rodzaju_oceny = new SqlParameter();
            id_rodzaju_oceny.ParameterName = "@id_rodzaju_oceny";
            id_rodzaju_oceny.DbType = System.Data.DbType.String;
            id_rodzaju_oceny.Value = txtRodzajOceny.SelectedIndex.ToString();
            zapytanie.Parameters.Add(id_rodzaju_oceny);

            SqlParameter ocena = new SqlParameter();
            ocena.ParameterName = "@ocena";
            ocena.DbType = System.Data.DbType.String;
            ocena.Value = txtOcena.Text.Trim().ToUpper();
            zapytanie.Parameters.Add(ocena);



            SqlParameter data_wystawienia_oceny = new SqlParameter();
            data_wystawienia_oceny.ParameterName = "@data_wystawienia_oceny";
            data_wystawienia_oceny.DbType = System.Data.DbType.String;
            data_wystawienia_oceny.Value = data.Text.Trim().ToUpper();
            zapytanie.Parameters.Add(data_wystawienia_oceny);
            
         
            zapytanie.ExecuteNonQuery();

Wszytskie głupie błędy zostały naprawione

dodanie znacznika <code class="csharp"> - @furious programming

0

"Instrukcja INSERT powoduje konflikt z ograniczeniem FOREIGN KEY „FK_oceny_nauczyciele”. Konflikt występuje w bazie danych „dziennik_lekcyjny” w tabeli „dbo.nauczyciele”, column 'id_nauczyciela'." Komunikat o błędzie

0

Ten error wyraźnie Ci sugeruje, że chcesz wsadzić do bazy rekord z ID, ktory nie istnieje w tabeli nauczyciele

0

Jasne, tylko jak to jest możliwe skoro do comboboxa ładuje wartości z tabeli nauczyciele ?

0

A podgladales w debugerze jak dokladnie wyglada to zapytanie, ktore idzie na baze? Moze ono wcale nie skleja sie w ten sposob w jaki chcesz. Postaw sobie breakpointa zaraz przed executem i podgladnij jak wyglada zmienna zapytanie

0

Zmienna o nazwie „@id_ucznia” została już zadeklarowana. W danej partii zapytań lub procedurze składowanej nazwy zmiennych muszą być unikatowe.

Kilka poprawek i nowy błąd

dodanie znacznika <quote> - @furious programming

0

Aha.

0

pomożesz jeszcze, proszę ?
Jakieś wskazówki ?

0

A mógłbyś może wrzucić ten kod, w którym zrobileś te kilka "poprawek"? Najlepiej byłoby jakbyś tez skladnie w postach kolorował

0
            string zapytanie1 = @"INSERT into oceny VALUES (@id_ucznia
//                                                               ,@id_nauczyciela
//                                                               ,@id_przedmiotu
//                                                               ,@id_rodzaju_oceny
//                                                               ,@ocena
//                                                               ,@data_wystawienia_oceny)";
            //            zapytanie.CommandText = zapytanie1;
            zapytanie.Connection = connect;


            SqlParameter id_ucznia = new SqlParameter();
            id_ucznia.ParameterName = "@id_ucznia";
            id_ucznia.DbType = System.Data.DbType.String;
            id_ucznia.Value = txtUczen.SelectedItem.ToString();
            zapytanie.Parameters.Add(id_ucznia);


            SqlParameter id_nauczyciela = new SqlParameter();
            id_nauczyciela.ParameterName = "@id_nauczyciela";
            id_nauczyciela.DbType = System.Data.DbType.String;
            id_nauczyciela.Value = txtNauczyciel.SelectedItem.ToString();
            zapytanie.Parameters.Add(id_nauczyciela);


            SqlParameter id_przedmiotu = new SqlParameter();
            id_przedmiotu.ParameterName = "@id_przedmiotu";
            id_przedmiotu.DbType = System.Data.DbType.String;
            id_przedmiotu.Value = txtPrzedmiot.SelectedItem.ToString();
            zapytanie.Parameters.Add(id_przedmiotu);

            SqlParameter id_rodzaju_oceny = new SqlParameter();
            id_rodzaju_oceny.ParameterName = "@id_rodzaju_oceny";
            id_rodzaju_oceny.DbType = System.Data.DbType.String;
            id_rodzaju_oceny.Value = txtRodzajOceny.SelectedItem.ToString();
            zapytanie.Parameters.Add(id_rodzaju_oceny);

            SqlParameter ocena = new SqlParameter();
            ocena.ParameterName = "@ocena";
            ocena.DbType = System.Data.DbType.String;
            ocena.Value = txtOcena.Text.Trim().ToUpper();
            zapytanie.Parameters.Add(ocena);



            SqlParameter data_wystawienia_oceny = new SqlParameter();
            data_wystawienia_oceny.ParameterName = "@data_wystawienia_oceny";
            data_wystawienia_oceny.DbType = System.Data.DbType.String;
            data_wystawienia_oceny.Value = data.Text.Trim().ToUpper();
            zapytanie.Parameters.Add(data_wystawienia_oceny);




            zapytanie.ExecuteNonQuery();
0

I to ci sie w ogóle kompiluje z tym zakomentowaniem?

0

to zakomentowanie to przypadek ;) Normalnie, sorry :) Nie ma tam żadnego zakomentowania

0
   string zapytanie1 = @"INSERT into oceny VALUES (@id_ucznia                                                               
                                                                ,@id_nauczyciela
                                                               ,@id_przedmiotu
                                                               ,@id_rodzaju_oceny
                                                               ,@ocena                                                             
                                                                ,@data_wystawienia_oceny)";
                       zapytanie.CommandText = zapytanie1;
            zapytanie.Connection = connect;


            SqlParameter id_ucznia = new SqlParameter();
            id_ucznia.ParameterName = "@id_ucznia";
            id_ucznia.DbType = System.Data.DbType.String;
            id_ucznia.Value = txtUczen.SelectedItem.ToString();
            zapytanie.Parameters.Add(id_ucznia);


            SqlParameter id_nauczyciela = new SqlParameter();
            id_nauczyciela.ParameterName = "@id_nauczyciela";
            id_nauczyciela.DbType = System.Data.DbType.String;
            id_nauczyciela.Value = txtNauczyciel.SelectedItem.ToString();
            zapytanie.Parameters.Add(id_nauczyciela);


            SqlParameter id_przedmiotu = new SqlParameter();
            id_przedmiotu.ParameterName = "@id_przedmiotu";
            id_przedmiotu.DbType = System.Data.DbType.String;
            id_przedmiotu.Value = txtPrzedmiot.SelectedItem.ToString();
            zapytanie.Parameters.Add(id_przedmiotu);

            SqlParameter id_rodzaju_oceny = new SqlParameter();
            id_rodzaju_oceny.ParameterName = "@id_rodzaju_oceny";
            id_rodzaju_oceny.DbType = System.Data.DbType.String;
            id_rodzaju_oceny.Value = txtRodzajOceny.SelectedItem.ToString();
            zapytanie.Parameters.Add(id_rodzaju_oceny);

            SqlParameter ocena = new SqlParameter();
            ocena.ParameterName = "@ocena";
            ocena.DbType = System.Data.DbType.String;
            ocena.Value = txtOcena.Text.Trim().ToUpper();
            zapytanie.Parameters.Add(ocena);



            SqlParameter data_wystawienia_oceny = new SqlParameter();
            data_wystawienia_oceny.ParameterName = "@data_wystawienia_oceny";
            data_wystawienia_oceny.DbType = System.Data.DbType.String;
            data_wystawienia_oceny.Value = data.Text.Trim().ToUpper();
            zapytanie.Parameters.Add(data_wystawienia_oceny);




            zapytanie.ExecuteNonQuery(); 

Ok rozumiem, mój błąd. Poprawione, skompilowane. Dalej jest coś nie tak. Próbuję szukać, ale moja wiedza jest za mała, żeby sobie z tym poradzić

0

A moglbys jeszcze napisac, w ktorej linijce sie wysypuje, ze ta zmienna juz zostala zadeklarowana? Bo w tym fragmencie kodu wszystko wydaje sie ok na pierwszy rzut oka. Moze w jakiejs innej czesci programu odwolujesz sie do tego zapytania?

0

:) Ku mojemu zdziwieniu, wartości do bazy zostają zapisane, pomimo tego ciągle występuje komunikat

"Zmienna o nazwie „@id_ucznia” została już zadeklarowana. W danej partii zapytań lub procedurze składowanej nazwy zmiennych muszą być unikatowe." Ten błąd wyskakuje przy tym "zapytanie.ExecuteNonQuery();" fragmencie

0

Zapisujesz dwa razy to samo, czy jak? :D Nie masz tam gdzieś jakiegoś "niezakomentowanego"

 zapytanie.ExecuteNonQuery();  

albo czegoś podobnego, normalnie, sorry?

Edit: po utworzeniu a przed wywołaniem tego zapytania, pokaż na ekran (i nam tutaj) jego treść.

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using System.Data.SqlClient;

namespace hate
{
    /// <summary>
    /// Interaction logic for DodajOcene.xaml
    /// </summary>
    public partial class DodajOcene : Window
    {
        SqlConnectionStringBuilder conString;
        SqlConnection connect;
        DataSet dataSet;
        DataTable tabela = new DataTable("oceny");
  
        SqlCommand zapytanie = new SqlCommand();
      

        public DodajOcene()
        {
            InitializeComponent();
            conString = new SqlConnectionStringBuilder();
            conString.DataSource = @"localhost";
            conString.InitialCatalog = "dziennik_lekcyjny";
            conString.UserID = "sa";
            conString.Password = "sasa";

            connect = new SqlConnection(conString.ConnectionString);

            connect.Open();


            SqlDataAdapter ada;
            dataSet = new DataSet();
            ada = new SqlDataAdapter("Select * from nauczyciele", connect);
            ada.Fill(dataSet, "nauczyciele");

            int k = 0;
            try
            {
                while (k < dataSet.Tables["nauczyciele"].Rows.Count)
                {
                    txtNauczyciel1.Items.Add(dataSet.Tables["nauczyciele"].Rows[k][0]);
                    k++;
                }

            }
            catch { }



            ada = new SqlDataAdapter("Select * from uczniowie", connect);
            ada.Fill(dataSet, "uczniowie");

            int j = 0;
            try
            {
                while (j < dataSet.Tables["uczniowie"].Rows.Count)
                {
                    txtUczen.Items.Add(dataSet.Tables["uczniowie"].Rows[j][0]);
                    j++;
                }

            }
            catch { }




            ada = new SqlDataAdapter("Select * from przedmioty", connect);
            ada.Fill(dataSet, "przedmioty");

            int p = 0;
            try
            {
                while (p < dataSet.Tables["przedmioty"].Rows.Count)
                {
                    txtPrzedmiot.Items.Add(dataSet.Tables["przedmioty"].Rows[p][0]);
                    p++;
                }

            }
            catch { }


            ada = new SqlDataAdapter("Select * from rodzaje_oceny", connect);
            ada.Fill(dataSet, "rodzaje_oceny");

            int r = 0;
            try
            {
                while (r < dataSet.Tables["rodzaje_oceny"].Rows.Count)
                {
                    txtRodzajOceny.Items.Add(dataSet.Tables["rodzaje_oceny"].Rows[r][0]);
                    r++;
                }

            }
            catch { }


          



        }

        private void buttonDodaj_Click(object sender, RoutedEventArgs e)
        {
            string zapytanie1 = @"INSERT into oceny VALUES (@id_ucznia                                                               
                                                                ,@id_nauczyciela
                                                               ,@id_przedmiotu
                                                               ,@id_rodzaju_oceny
                                                               ,@ocena                                                             
                                                                ,@data_wystawienia_oceny)";
            zapytanie.CommandText = zapytanie1;
            zapytanie.Connection = connect;


            SqlParameter id_ucznia = new SqlParameter();
            id_ucznia.ParameterName = "@id_ucznia";
            id_ucznia.DbType = System.Data.DbType.String;
            id_ucznia.Value = txtUczen.SelectedValue.ToString();
            zapytanie.Parameters.Add(id_ucznia);


            SqlParameter id_nauczyciela = new SqlParameter();
            id_nauczyciela.ParameterName = "@id_nauczyciela";
            id_nauczyciela.DbType = System.Data.DbType.String;
            id_nauczyciela.Value = txtNauczyciel1.SelectedValue.ToString();
            zapytanie.Parameters.Add(id_nauczyciela);


            SqlParameter id_przedmiotu = new SqlParameter();
            id_przedmiotu.ParameterName = "@id_przedmiotu";
            id_przedmiotu.DbType = System.Data.DbType.String;
            id_przedmiotu.Value = txtPrzedmiot.SelectedValue.ToString();
            zapytanie.Parameters.Add(id_przedmiotu);

            SqlParameter id_rodzaju_oceny = new SqlParameter();
            id_rodzaju_oceny.ParameterName = "@id_rodzaju_oceny";
            id_rodzaju_oceny.DbType = System.Data.DbType.String;
            id_rodzaju_oceny.Value = txtRodzajOceny.SelectedValue.ToString();
            zapytanie.Parameters.Add(id_rodzaju_oceny);

            SqlParameter ocena = new SqlParameter();
            ocena.ParameterName = "@ocena";
            ocena.DbType = System.Data.DbType.String;
            ocena.Value = txtOcena.Text.Trim().ToUpper();
            zapytanie.Parameters.Add(ocena);



            SqlParameter data_wystawienia_oceny = new SqlParameter();
            data_wystawienia_oceny.ParameterName = "@data_wystawienia_oceny";
            data_wystawienia_oceny.DbType = System.Data.DbType.String;
            data_wystawienia_oceny.Value = data.Text.Trim().ToUpper();
            zapytanie.Parameters.Add(data_wystawienia_oceny);




            zapytanie.ExecuteNonQuery();
        }
    }
}

Nie udało mi się zauważyć podwójnego Executa :P

1

Majac taki burdel w kodzie, wcale sie nie dziwie ;)

1

Witam,

Może popraw kod na coś podobnego jak masz w moim przykładzie, tak by całość była bardziej opisowa

        private static string ConnectionString
        {
            get
            {
                return Properties.Settings.Default.ConnectionString;
            }
        }
        public static void SetDeliveryId(
            string invoiceNr,
            string deliveryId,
            DateTime deliveryDate)
        {
            try
            {
                using (var db = new SqlConnection(ConnectionString))
                {
                    db.Open();

                    using (var sql = db.CreateCommand())
                    {
                        sql.CommandText = "[dbo].[set_invoice_map_delivery]";
                        sql.CommandType = CommandType.StoredProcedure;
                        sql.CommandTimeout = 600;

                        sql.Parameters.Add("@invoice_nr", SqlDbType.VarChar, invoiceNr.Length).Value = invoiceNr;
                        sql.Parameters.Add("@delivery_id", SqlDbType.VarChar, deliveryId.Length).Value = deliveryId;
                        sql.Parameters.Add("@delivery_date", SqlDbType.Date).Value = deliveryDate;

                        try
                        {
                            sql.ExecuteNonQuery();
                        }
                        catch (Exception exception)
                        {
                            Log.Error(exception.Message, exception);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Log.Error(exception.Message, exception);
            }
        }

Pozdrawiam,

mr-owl

dodanie znaczników <code class="csharp"> - @furious programming

0

Bardzo dziękuję mr-owl, pomoc nieoceniona :)

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