Nganku Junior Ответов: 1

Как выполнить условный оператор if-else в событии button-click


I got a situation here. I need to insert values into tables depending on what a user provides on the Window form. If a good does not exist and more than is necessary is acquired the the excess must be entered into a table called "BulkAvailable" this is where a big exists in my code as when I comment this part out the code runs well. Please find the piece of code below

When I run the code it returns an exception message: "String of binary data would be truncated. The statement has been terminated"


Что я уже пробовал:

try
           {
               SqlConnection con = new SqlConnection("Data Source=PV10\\LOCALSERVER;Initial Catalog=SmallSoftwareDB;Integrated Security=True;Pooling=False");
               con.Open();
               float a = float.Parse(textBox8.Text, System.Globalization.CultureInfo.InvariantCulture);
               int b = int.Parse(textBox9.Text);
               float c = a * b;
               var T = c.ToString(System.Globalization.CultureInfo.InvariantCulture);

               float x = float.Parse(textBox4.Text, System.Globalization.CultureInfo.InvariantCulture);
               int z = int.Parse(textBox3.Text);
               float y = x * z;
               var total = y.ToString(System.Globalization.CultureInfo.InvariantCulture);

               int d = b - z;

               string uba = "insert into BulkSale(ProductName, ProductSource, Date, Quantity, Type, UnitPrice, Total, Nature) values('" + textBox1.Text + "', '" + textBox2.Text + "', '" + dateTimePicker1.Value + "', '" + textBox3.Text + "', '" + textBox6.Text + "', '" + textBox4.Text + "', '" + textBox5.Text + "', '"+textBox7.Text+"')";
               string A = "insert into BulkInput(ProductName, ProductSource, Date, Quantity, Type, UnitPrice, Total, Nature) values('"+textBox1.Text+"','"+textBox2.Text+"','"+dateTimePicker1.Value+"','"+b+"','"+textBox6.Text+"','"+a+"','"+c+"', '"+textBox7.Text+"')";
               SqlCommand cmd = new SqlCommand(uba, con);
               SqlCommand X = new SqlCommand(A, con);
               cmd.ExecuteNonQuery();
               X.ExecuteNonQuery();

               try
               {
                   if (int.Parse(textBox9.Text) > int.Parse(textBox3.Text))
                   {
                       string B = "insert into BulkAvailable(ProductSource,ProductName,Date,Quantity,Type) values('" + textBox2.Text + "','" + textBox1.Text + "','" + dateTimePicker1.Text + "','" + d + "','" + textBox6.Text + "')";
                       SqlCommand Bc = new SqlCommand(B, con);
                       Bc.ExecuteNonQuery();
                   }

                   else
                   {
                       MessageBox.Show("You successfully Bought and Sold", " ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                   }
               }
               catch (Exception aze)
               {
                   MessageBox.Show(aze.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
               }

               MessageBox.Show("Operation Successfully Executed", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
               con.Close();
           }
           catch (Exception er)
           {
               MessageBox.Show(er.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
           }
       }

[no name]

Вы не только просите атаку SQL-инъекции, но и пытаетесь поместить в столбец базы данных больше данных, чем он настроен принять. Вот что говорит вам ошибка.

Suvendu Shekhar Giri

опять же, мой виртуальный 5!

1 Ответов

Рейтинг:
11

Wendelius

Как уже указывалось, в сообщении говорится, что вы пытаетесь вставить слишком большое значение в столбец.

Однако более серьезной проблемой является структура программы:
- Вы не используете параметры, проблемы с SQL-инъекцией, типы данных и т. д
- Вы не распоряжаетесь объектами, вы злоупотребляете ресурсами
- Вы закрываете соединение только в ситуации, когда не возникает никаких исключений и так далее.

Таким образом, код должен выглядеть примерно так

try
{
   using (SqlConnection con = new SqlConnection("Data Source=PV10\\LOCALSERVER;Initial Catalog=SmallSoftwareDB;Integrated Security=True;Pooling=False")) {
      con.Open();
      float a = float.Parse(textBox8.Text, System.Globalization.CultureInfo.InvariantCulture);
      int b = int.Parse(textBox9.Text);
      float c = a * b;
      var T = c.ToString(System.Globalization.CultureInfo.InvariantCulture);
 
      float x = float.Parse(textBox4.Text, System.Globalization.CultureInfo.InvariantCulture);
      int z = int.Parse(textBox3.Text);
      float y = x * z;
      var total = y.ToString(System.Globalization.CultureInfo.InvariantCulture);
 
      int d = b - z;
 
      string uba = @"insert into BulkSale(ProductName, ProductSource, Date, Quantity, Type, UnitPrice, Total, Nature) 
                     values (@ProductName, @ProductSource, @Date, @Quantity, @Type, @UnitPrice, @Total, @Nature)";
      using (SqlCommand cmd = new SqlCommand(uba, con)) {
         cmd.Parameters.AddWithValue("@ProductName", textBox1.Text);
         cmd.Parameters.AddWithValue("@ProductSource", textBox2.Text);
         cmd.Parameters.AddWithValue("@Date", dateTimePicker1.Value);
         cmd.Parameters.AddWithValue("@Quantity", textBox3.Text);
         cmd.Parameters.AddWithValue("@Type", textBox6.Text);
         cmd.Parameters.AddWithValue("@UnitPrice", textBox4.Text);
         cmd.Parameters.AddWithValue("@Total", textBox5.Text);
         cmd.Parameters.AddWithValue("@Nature", textBox7.Text);
         cmd.ExecuteNonQuery();
         ...

Также попробуйте использовать описательные имена с объектами пользовательского интерфейса. Вместо textBox1 используйте например ProductName То же самое относится и к именам переменных в методах (например, cmd или XЭто облегчает отладку и понимание кода, особенно когда вы вернетесь к нему позже.

Что касается строки подключения, то вы, вероятно, используете ее во многих местах программы, поэтому с точки зрения ремонтопригодности храните ее в одном месте, возможно, в конфигурационном файле.

Что касается выполнения команд базы данных, взгляните на Правильное выполнение операций с базой данных[^]


Nganku Junior

Спасибо, Мика. Вы не только указали на мои недостатки, но и дали мне путь, по которому я должен идти, чтобы исправить их. Я благодарен

Wendelius

Всегда пожалуйста :)