Как вычесть время в C # - PullRequest
0 голосов
/ 22 января 2012

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

private void button3_Click_1(object sender, EventArgs e)
    {
        label4.Visible = true;
        textBox3.Visible = true;
        string condur = Properties.Settings.Default.DBConnectionString;
        SqlConnection connection = new SqlConnection(condur);
        string q1 = "select in_time from in_time where car_reg='" + comboBox1.Text + "' ";

        string q2 = "select out_time from out_time where car_reg='" + comboBox1.Text + "' ";
        SqlCommand command1 = new SqlCommand(q1, connection);
        SqlCommand command2 = new SqlCommand(q2, connection);
        try
        {
            connection.Open();
            string q3=command1.ExecuteNonQuery().ToString();

            string q4=command2.ExecuteNonQuery().ToString();



            DateTime dt1 = DateTime.Parse(q3);
            DateTime dt2 = DateTime.Parse(q4);
            TimeSpan result = dt2 - dt1; ;
            string result1 = result.ToString();
            textBox3.Text = result1;

            //MessageBox.Show("Insertion successful!");
            //textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; comboBox1.Text = ""; comboBox3.Text = ""; textBox11.Text = ""; textBox6.Text = ""; textBox8.Text = ""; textBox9.Text = ""; richTextBox1.Text = ""; textBox4.Text="";
        }
        catch (Exception exp)
        {
            throw exp;
        }
        finally
        {
            connection.Close();
        }

    }

1 Ответ

4 голосов
/ 22 января 2012

Похоже, вы ответили на свой вопрос:

    TimeSpan result = dt2 - dt1;

Чтобы вычесть два значения DateTime в C #, вы просто используете оператор вычитания.Если с примером кода, который вы опубликовали, что-то не так, вы должны описать ошибку и то, что вы ожидали.

Изменить в ответ на комментарий

Это исключение не имеет ничего общего с вычитая даты, это как-то связано с вашим преобразованием из типа string в тип DateTime .Вы пытаетесь проанализировать строку в DateTime:

    DateTime dt1 = DateTime.Parse(q3);

Это не удалось, поскольку q3 не представляет допустимую строку.Причина в том, что вы ( не ) запрашиваете:

string q3=command1.ExecuteNonQuery().ToString();

ExecuteNonQuery не возвращает результаты запроса, авозвращает количество измененных строк .Другими словами, ExecuteNonQuery предназначен не для запросов, а для сценариев обновления и т. Д.

Возможно, вы захотите использовать ExecuteScalar, который возвращает единственное значение иззапрос.Если типы в БД верны, он вернется как DateTime, поэтому вам не нужно выполнять часть DateTime.Parse.Соответствующими частями вашего кода станут:

DateTime q3 = (DateTime)command1.ExecuteScalar();
DateTime q4 = (DateTime)command2.ExecuteScalar();

TimeSpan result = q4-q3;

Да, и кстати, пожалуйста, посмотрите термины "SQL-инъекция" и "параметризованные запросы" в Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...