[英]Calculating Minutes between two times using TableAdapter C# [sql]
[英]Finding time difference between two times stored in database using sql and c#
string sqlUserName3 = "SELECT out_date FROM status where s_id='" + TextBox2.Text + "'";
SqlCommand sqlcmd3 = new SqlCommand(sqlUserName3, sqlcon);
sqlUserName4 = "SELECT in_date FROM status where s_id='"+TextBox2.Text+"'";
SqlCommand sqlcmd4 = new SqlCommand(sqlUserName4, sqlcon);
string q3 = sqlcmd3.ExecuteNonQuery().ToString();
string q4 = sqlcmd4.ExecuteNonQuery().ToString();
DateTime dt1 = DateTime.Parse(q3);
DateTime dt2 = DateTime.Parse(q4);
TimeSpan result = dt1.Subtract(dt2);
string result1 = result.ToString();
TextBox8.Text = result1;
//Response.Redirect("login.aspx");
sqlcon.Close();
目前,您的代碼有很多問題:
ExecuteNonQuery
。 DateTime
形式獲取的形式獲取結果。 盡可能避免字符串轉換。 因此,您應該:
ExecuteReader
並從每個閱讀器獲取第一個結果 GetDateTime
方法從結果中獲取DateTime
。 之后,我也將親自使用減法運算符:
TimeSpan difference = end - start;
...但這只是優先考慮的問題,而不是當前代碼中的實際錯誤 。
您的錯誤在這里:
string q3 = sqlcmd3.ExecuteNonQuery().ToString();
string q4 = sqlcmd4.ExecuteNonQuery().ToString();
DateTime dt1 = DateTime.Parse(q3);
DateTime dt2 = DateTime.Parse(q4);
ExecuteNonQuery
不以字符串表示形式返回日期。 它返回受查詢影響的記錄數; 因此,當您運行DateTime.Parse(number)
會收到錯誤消息。
您的查詢都沒有返回日期,因此不清楚您希望如何通過調用問題中的SQL來獲取日期...
更新資料
不要使用字符串連接來構建SQL語句。 您可以使用參數來避免自己遭受SQL注入攻擊。 一個例子是:
string sqlUserName3 = "SELECT out_date FROM status where s_id=@id";
SqlCommand sqlcmd3 = new SqlCommand(sqlUserName3, sqlcon);
sqlcmd3.Parameters.AddWithValue("@id",TextBox2.Text );
您使用SqlCommand.ExecuteNonQuery()
但需要SqlCommand.ExecuteScalar()
。 第一個函數不返回任何內容,它應該用於諸如insert
或update
類的查詢。 第二個返回查詢輸出的第一行的第一個單元格的值。
您應該使用execute標量或傳遞一些out參數來獲取值。 這應該為您在q3和q4中帶來一些價值。
現在,為了避免出錯,您還應該使用DateTime.ParseExact而不是簡單的Parse。
DateTime dt1 = DateTime.ParseExact(q3,"dd/mm/yyyy HH:mm",CultureInfo.InvariantCulture);
DateTime dt2 = DateTime.ParseExact(q4,"dd/mm/yyyy HH:mm",CultureInfo.InvariantCulture);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.