ahmed_sa Ответов: 3

Как написать для цикла увеличение от часа по длительности для каждой итерации ?


Проблема

Как написать для цикла увеличение от часа по длительности для каждой итерации ?

Я работаю над приложением windows form csharp vs2015

у меня есть три текстовых поля

txt_fromhour 6

tx_tohour 12

txt_Duration 1.5

txt_countduration 4 (вычисляется как 12-6=6/1.5=4)

У меня есть имя таблицы обучение есть 3 поля

серийный int

fromhour десятичной

tohour десятичной

Мне нужно написать для цикла insert данные по трем полям как пример ниже

когда я пишу fromhour 6 и tohour 12 и продолжительность составляет 1,5 данные будут вставлены как показано ниже

serial    fromhour            tohour

1            6                7.5

2            7.5               9

3            9                10.5

4            10.5              12


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

for(int i=0;i<=4;i++)

{

insert into training(serial,fromhour,tohour) values(max+1,??,??)

}

3 Ответов

Рейтинг:
2

OriginalGriff

Начните с преобразования значений yoru three textbox в числа: Десятичный.Метод TryParse (Система) | Microsoft Docs[^] сделает это и сообщит об ошибках пользователю вместо того, чтобы продолжать.

Затем создайте и откройте соединение с БД:

            using (SqlConnection con = new SqlConnection(strConnect))
                {
                con.Open();
...
                }
Внутри открытого соединения установите петлю: while будет делать, останавливаясь, когда fromHour больше toHour.

Внутри цикла создайте an SQLCommand объект (с using блок, как указано выше) и передать два раза в БД в виде параметризованного запроса. При необходимости Сдайте экзамен. serial значение каждый раз (хотя я бы сделал его полем идентификации в БД, так что SQL обрабатывает все это) Увеличьте число fromHour посредством duration.

Это легко сделать - просто попробуйте сделать это вручную, и вы поймете, что я имею в виду.


Рейтинг:
2

Christian Graus

Храните свою длительность как переменную. Установите таймер, чтобы он срабатывал каждый час, и увеличивайте его. Если вы хотите получить постоянное увеличение с заданного времени, используйте DateTime.Теперь рассчитаем его по свойству.


ahmed_sa

не могли бы вы дать мне более ясный или написать код psudo для этого пожалуйста

Christian Graus

Я не могу сделать это яснее. Установите таймер для увеличения вашего значения ежечасно. Сохраните значение, которое вы хотите использовать в переменной, установите его из этой переменной.

Рейтинг:
0

Maciej Los

Вам нужно использовать переменную вне цикла. Видеть:

//use it for number formatting
System.Globalization.CultureInfo cu = new System.Globalization.CultureInfo("en-us");
int fromhour = 6;
int tohour = 12;
float duration = 1.5F;

int count = (int)((tohour - fromhour) / duration);
//here!
float nextfrom = fromhour;
for(int i=1; i<=count; i++)
{
	Console.WriteLine("{0} \t-\t {1}", nextfrom.ToString("0.0", cu), (nextfrom+duration).ToString("0.0", cu));
	//insert statement here
	nextfrom += duration; 
}


Результат:
6.0   -   7.5
7.5   -   9.0
9.0   -   10.5
10.5   -   12.0


[РЕДАКТИРОВАТЬ]
Я забыл упомянуть, что вы должны работать с типом данных datetime вместо чисел, чтобы избежать проблем в будущем.
DateTime counter = DateTime.Today.AddHours(fromhour);
for(int i=1; i<=count; i++)
{
	Console.WriteLine("{0} \t-\t {1}", counter.ToString("HH:mm", cu), counter.AddHours(duration).ToString("HH:mm", cu));
	//insert statement here
	counter = counter.AddHours(duration); 
}

Результат:
06:00   -   07:30
07:30   -   09:00
09:00   -   10:30
10:30   -   12:00