簡體   English   中英

使用SQL和C#查找兩次存儲在數據庫中的時間差

[英]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();

目前,您的代碼有很多問題:

  • 您不應該使用字符串串聯來構建查詢。 請改用參數化SQL。 這樣可以避免SQL注入攻擊和轉換問題
  • 當您嘗試執行...查詢時,您正在使用ExecuteNonQuery
  • 您正在將結果轉換為字符串,即使它確實返回了日期,這也是一個壞主意……相反,以可以僅以DateTime形式獲取的形式獲取結果。 盡可能避免字符串轉換。

因此,您應該:

  • 使用參數代替動態SQL
  • 使用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() 第一個函數不返回任何內容,它應該用於諸如insertupdate類的查詢。 第二個返回查詢輸出的第一行的第一個單元格的值。

您應該使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM