我从数据库中取两个值作为字符串。现在我想减去这两个值。请帮助我,并提前感谢。
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();
}
}
答案 0 :(得分:4)
看起来你回答了自己的问题:
TimeSpan result = dt2 - dt1;
要在C#中减去两个DateTime
值,只需使用减法运算符即可。如果您发布的代码示例有问题,您应该描述错误以及您预期会发生什么。
该异常与减去日期无关,它与从字符串类型到 DateTime 。您正在尝试从字符串解析为DateTime:
DateTime dt1 = DateTime.Parse(q3);
此操作失败,因为q3
不代表有效字符串。原因是你(don't)查询的方式:
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;
哦,顺便说一句,请在Google上查找“SQL注入”和“参数化查询”这两个术语。