Prośba o sprawdzenie kodu C#

0

Witam wszystkich, to mój pierwszy wątek na tym forum, nie znam jeszcze dobrze tutejszych obyczajów, ale mam nadzieję, że nie zostanę na wstępie zlinczowany ;)

Chciałbym prosić o sprawdzenie kodu. Problem polega na tym, że jeżeli kliknę jakiś button bez wcześniejszego wpisania danych do textbox'ów program wyrzuca komunikat "Połączenie nie zostało zamknięte, obecny stan połączenia: otwarte" po czym program przestaje odpowiadać

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace WymianaOlejow
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=F:\Pojazdy.mdf;Integrated Security=True");
       
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                con.Open();
                SqlCommand com = new SqlCommand("INSERT INTO Przebieg (IdSamochod, StanLicznika, Data) values ((SELECT IdSamochod FROM Samochody WHERE NrRej = @NrRej),@Przebieg, @Data) ", con);

                com.Parameters.AddWithValue("@NrRej", comboBox1.Text);
                com.Parameters.AddWithValue("@Przebieg", Convert.ToInt32(textBox2.Text));
                com.Parameters.AddWithValue("@Data", textBox4.Text);
                com.ExecuteNonQuery();
                con.Close();
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            //SqlDataAdapter sda = new SqlDataAdapter();
            //sda.SelectCommand = com;
            //DataTable dbdataset = new DataTable();
            //sda.Fill(dbdataset);
            //BindingSource bSource = new BindingSource();

            //bSource.DataSource = dbdataset;
            //dataGridView1.DataSource = bSource;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                con.Open();
                SqlCommand com3 = new SqlCommand("INSERT INTO Wymiana (IdSamochod, StanLicznika, Data) values ((SELECT IdSamochod FROM Samochody WHERE NrRej = @NrRej),@Przebieg, @Data) ", con);

                com3.Parameters.AddWithValue("@NrRej", comboBox1.Text);
                com3.Parameters.AddWithValue("@Przebieg", Convert.ToInt32(textBox3.Text));
                com3.Parameters.AddWithValue("@Data", textBox5.Text);
                com3.ExecuteNonQuery();
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'pojazdyDataSet.Samochody' table. You can move, or remove it, as needed.
            this.samochodyTableAdapter.Fill(this.pojazdyDataSet.Samochody);

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.SelectedItem != null)
            {
                con.Open();

                //zapełnianie DataGridView'a
                SqlCommand com = new SqlCommand("Select Samochody.NrRej, Przebieg.StanLicznika, Przebieg.Data From Samochody inner join Przebieg on Samochody.IdSamochod = PRzebieg.IdSamochod WHERE NrRej = '" + comboBox1.Text + "'", con);
                SqlDataAdapter sda = new SqlDataAdapter();
                sda.SelectCommand = com;
                DataTable dbdataset = new DataTable();
                sda.Fill(dbdataset);
                BindingSource bSource = new BindingSource();

                bSource.DataSource = dbdataset;
                dataGridView1.DataSource = bSource;

                con.Close();
            }

            try
            {
                con.Open();
            //zapełnianie textbox'a
            SqlCommand com2 = new SqlCommand("SELECT Samochody.CoIleWymiana - (tb1.stan-tb2.wymiana) as MoznaJeszcze FROM (SELECT max(StanLicznika) as stan, IdSamochod  FROM Przebieg GROUP BY IdSamochod) as tb1 inner join (SELECT max(StanLicznika)as wymiana, IdSamochod  FROM Wymiana GROUP BY IdSamochod) as tb2 on tb1.IdSamochod = tb2.IdSamochod inner join Samochody on Samochody.IdSamochod = tb2.IdSamochod WHERE NrRej ='" + comboBox1.Text + "'", con);
            
                int sprawdz = Convert.ToInt32(com2.ExecuteScalar().ToString());


                if (sprawdz > 0)
                {
                    textBox1.Text = Convert.ToString(sprawdz);
                }
                else
                {
                    textBox1.Text = "Należy wymienić olej";
                }
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            


        }

        private void button3_Click(object sender, EventArgs e)
        {
            monthCalendar1.Visible = true;
        }

       

        private void button4_Click(object sender, EventArgs e)
        {
            monthCalendar2.Visible = true;
           
        }

        private void monthCalendar2_DateSelected(object sender, DateRangeEventArgs e)
        {
            textBox5.Text = monthCalendar2.SelectionStart.ToShortDateString();
            monthCalendar2.Visible = false;
            
        }

        private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
        {
            textBox4.Text = monthCalendar1.SelectionStart.ToShortDateString();
            monthCalendar1.Visible = false;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                con.Open();
                SqlCommand com4 = new SqlCommand("INSERT INTO Samochody (NrRej, Marka, Model, CoIleWymiana) values (@NrRej, @Marka, @Model, @Wymiana) ", con);

                com4.Parameters.AddWithValue("@NrRej", textBox6.Text);
                com4.Parameters.AddWithValue("@Marka", textBox7.Text);
                com4.Parameters.AddWithValue("@Model", textBox8.Text);
                com4.Parameters.AddWithValue("@Wymiana", Convert.ToInt32(textBox9.Text));

                com4.ExecuteNonQuery();
                SqlCommand com5 = new SqlCommand("Select * FROM Samochody", con);
                SqlDataAdapter sda = new SqlDataAdapter();
                sda.SelectCommand = com5;
                DataTable dbdataset = new DataTable();
                sda.Fill(dbdataset);
                BindingSource bSource = new BindingSource();

                bSource.DataSource = dbdataset;
                dataGridView2.DataSource = bSource;

                label12.Visible = true;

                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            try
            {
                con.Open();
               
                SqlCommand com5 = new SqlCommand("Select * FROM Samochody", con);
                SqlDataAdapter sda = new SqlDataAdapter();
                sda.SelectCommand = com5;
                DataTable dbdataset = new DataTable();
                sda.Fill(dbdataset);
                BindingSource bSource = new BindingSource();

                bSource.DataSource = dbdataset;
                dataGridView2.DataSource = bSource;

               

                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

      

        
    }
} 
2

no ale w czym problem? Skoro kontrolki muszą być wypełnione to należało by przed próbą zapisu do bazy sprawdzić czy rzeczywiście są wypełnione i jeśli nie to powiedzieć to userowi

0

takie coś wystarczy? Przykładowo:

 if (textBox2.Text != "" && textBox4.Text != "")
            {
<kod>
}
else
{
MessageBox.Show("Podaj wartości pól");
}
0

a nie lepiej po prostu sprawdzic zamiast zgadywac ;)?

0

nie wiem, pewnie tak, ale nie wiem jak to zrobić :D

Edit: Aha, w sensie ja mam to sprawdzić :P

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