Marc-IT Ответов: 2

Изменение формулы в зависимости от значения SQL


Привет, у меня есть приложение c# winforms, которое делает некоторые вычисления на основе формулы.
формула работает нормально, но в зависимости от значения таблицы sql формула может изменяться. Я думал о том, чтобы добавить "Если", но если я это сделаю, то нажму кнопку, и Формула ничего не сделает.
Я удалил большое количество кода, чтобы облегчить просмотр.

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

private void button1_Click(object sender, EventArgs e) //formula
                {
                    decimal ValueFromDB;
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand("select prumos from dbo.modelos where id = '" + prumos + "'", con))
                    {
                        cmd.Parameters.AddWithValue("@ID", prumos);
                        ValueFromDB = decimal.Parse(cmd.ExecuteScalar().ToString());
                        con.Close();
                    }
                    if (larg.Text == string.Empty)
                    {
                        MessageBox.Show("Missing Value", "Warning");
                        return;
    //SEVERAL OTHER IF´s to prevent empty textboxes
                    }        
            else if (prumos == "1")
            {
                return;
            }    
                    decimal uw;                    
                    decimal ata;                 
                    decimal vi1;
    ...
                    decimal wmk4;
                    decimal wmk5;
                    decimal wmk6;
                    
        
                    vi1 = decimal.Parse(textBox1.Text);
                    wmk3 = decimal.Parse(textBox12.Text);
                    wmk4 = decimal.Parse(textBox22.Text);
    ...
                    wmk5 = decimal.Parse(textBox17.Text);
                    wmk6 = decimal.Parse(textBox15.Text);
    ...                     
                    uw = (adp * ufa + adv * ug + perv * wmk) / ac;
                    answ.Text = (Math.Truncate(uw * 100) / 100).ToString();
     {
            else if (prumos == "2")
            {
                return;
            }


есть идеи, почему формула не загружается после того, как я применяю это правило?

Заранее спасибо.

2 Ответов

Рейтинг:
2

Jawad Ahmed Tanoli

 if (larg.Text == string.Empty)
  {
    MessageBox.Show("Missing Value", "Warning");
    return;
    //SEVERAL OTHER IF´s to prevent empty textboxes
  } 
// In both cases it will return  
else if (prumos.Equals("1") || prumos.Equals("2"))
 {
   return;
 }
// Put your calculation in last Condition 
else
{
				
decimal uw;                    
decimal ata;                 
decimal vi1;
decimal wmk4;
decimal wmk5;
decimal wmk6;
vi1 = decimal.Parse(textBox1.Text);
wmk3 = decimal.Parse(textBox12.Text);
wmk4 = decimal.Parse(textBox22.Text);
wmk5 = decimal.Parse(textBox17.Text);
wmk6 = decimal.Parse(textBox15.Text);
uw = (adp * ufa + adv * ug + perv * wmk) / ac;
answ.Text = (Math.Truncate(uw * 100) / 100).ToString();
}		


Рейтинг:
12

OriginalGriff

Что ж...вы не меняете значение "prumos" в этом коде - или даже не показываете, где оно установлено изначально.
Вы действительно считываете значение из SQL, но сохраняете его в ValueFromDB на которую ты больше никогда не ссылаешься. Я подозреваю, что вам действительно нужно смотреть на это вместо этого как на часть вашего if скорее, чем promus

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


Marc-IT

Спасибо за ответ.
Можете ли вы привести пример того, как бы вы выбрали это значение?
Вы правы, ValueFromDB-это то значение, которое мне нужно, я опубликовал более старую версию кода. я попробовал еще раз if (prumos = = "ValueFromDB"), но это все равно не сработает

OriginalGriff

Нет, ValueFromDb содержит значение, которое Вы читаете из базы данных - promus сообщает БД, какая конкретная строка содержит возвращаемое значение.
Как только он будет там, он будет содержать десятичное число (потому что вы объявили его как десятичную переменную). Таким образом, вы можете сравнить его с другими десятичными значениями:
if (ValueFromDB == 1)
{
...
}
else if (ValueFromDB == 2)
{
...
}