2012-01-22 4 views
-1

データベースから2つの値を文字列として取ります。今私はこれらの2つの値を減算したい。私を助けて、事前に感謝してください。 C#で2つのDateTime値を減算するC#で時間を引く方法

TimeSpan result = dt2 - dt1; 

、あなたは、単に減算演算子を使用します。

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

問題は何ですか?表示されたコードは、値を正常に減算します。 – JaredPar

+6

さて、どうしてうまくいかないのですが、何が結果になったのですか?あなたは例外を取得していますか? – neeKo

+0

はq3とq4の有効なデータですか?あなたが得ていることと期待していることを私たちに教えてください。 –

答えて

4

それはあなた自身の質問に答えのように見えます。投稿したコードサンプルに何らかの問題がある場合は、エラーと発生すると予想される内容を説明する必要があります。

編集応じて

をコメントにその例外が日付を差し引くとは何の関係もありません、それはタイプのDateTimeの種類文字列からのコンバージョンとは何かを持っています。あなたは、文字列からDateTimeのに解析しようとしている。

DateTime dt1 = DateTime.Parse(q3); 

q3が有効な文字列を表していないため、これが失敗しました。理由は、あなた(don't)の方法であるクエリ:

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

ExecuteNonQueryではなく、それは変更された行の数を返し、クエリの結果を返しません。つまり、ExecuteNonQueryはクエリのためではなく、更新シナリオなどのために使用されます。

ExecuteScalarは、クエリから単一の値を返します。 DBの型が正しい場合はDateTimeに戻りますので、DateTime.Parseの部分を実行する必要はありません。あなたのコードの関連部分はなる:

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

TimeSpan result = q4-q3; 

ああ、ところで、Googleで用語「SQLインジェクション」、および「パラメータ化クエリを」アップ見てください。

+0

「文字列が有効な日時として認識されませんでした。」この例外MSGは – AsifAbdullah

+0

を示している私は、エントリー時間を話していると、従業員の退室時間と2つの異なるデータベースのテーブルに格納されているtgem.now私は、例外を表示するたびに、特定のemployee.btのデータベースに格納されているrの2つの値を差し引きたい。あなたは私の助けを借りて助けてくれます。急いで....... – AsifAbdullah

+0

私の更新された回答をご覧ください。あなたがその情報を最初から含めると、ほんの数分で答えが得られました。人々がここでコードを実行してデバッグすることを期待しないでください。尋ねるときにすべての関連情報を含めてください。 – driis