簡體   English   中英

如何使用 LIKE % C# 獲取開始日期和結束日期

[英]How can i get the Start Date and End Date with LIKE % C#

之間是什么日期的正確語法like 這是我的示例代碼。 我在查詢中遇到錯誤

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    MySqlDataAdapter sda = new MySqlDataAdapter(
        "SELECT `empID`, `Name`, `Date`, `empIn`, `empOut`, `workhours`, `workhoursTotal`, `workhoursLate`, `workhoursLateTotal`, `overtime`, `minuteOvertime`, `Reason`, `undertime`, `undertimeTotalMin`, `status`, `Payslip` FROM `attendance`"
        + " WHERE  Date BETWEEN LIKE '" 
        + dateTimePicker1.Value.ToString("yyyy-MM-dd") 
        + "%' AND Date LIKE'" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "%'", con);

    DataTable data = new DataTable();
    sda.Fill(data);
    dataGridView1.DataSource = data;
}

如果您將 DateTime 值轉換為字符串以在 SQL 中使用,那么您正在做一些非常錯誤的事情。 使用參數化查詢讓 ADO.Net 為您處理這個問題。 作為獎勵,這將保護您免受 SQL 注入攻擊,並且通常性能更好。

此外,將LIKEBETWEEN一起使用完全沒有意義。 就此而言, BETWEEN本身對於日期比較來說通常是不好的做法,因為它包含在范圍的兩端。 更好的做法是比較日期>=與范圍開始的位置,以及< (沒有= )范圍結束時第二天的第一時刻。

看起來您還試圖在整個應用程序或表單中重復使用相同的連接對象。 不要那樣做。 ADO.Net 具有稱為連接池的功能,它將以更有效的方式為您處理此問題。 您確實希望為大多數查詢創建一個新的連接對象。

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    var result = new DataTable();
    string sql = @"
        SELECT `empID`, `Name`, `Date`, `empIn`, `empOut`, `workhours`, `workhoursTotal`, 
           `workhoursLate`, `workhoursLateTotal`, `overtime`, `minuteOvertime`, `Reason`, 
           `undertime`, `undertimeTotalMin`, `status`, `Payslip` 
        FROM `attendance`
        WHERE `Date` > @StartDate AND `Date` <= @EndDate";

    using (var con = new MySqlConnection("connection string here"))
    using (var cmd = new MySqlCommand(sql, con))
    using (var sda = new MySqlDataAdapter(cmd))
    {
        cmd.Parameters.Add("@StartDate", MySqlDbType.DateTime).Value =  dateTimePicker1.Value.Date;
        cmd.Parameters.Add("@StartDate", MySqlDbType.DateTime).Value =  dateTimePicker2.Value.Date.AddDays(1);
 
        sda.Fill(result);
    }
    dataGridView1.DataSource = result;
}

首先,您確定您的 dateTimePicker 有信息嗎? 將值直接發送到數據庫不是一個好習慣。 其次,代碼有很多錯誤:

MySqlDataAdapter sda = new MySqlDataAdapter("SELECTempID,Name,Date,empIn,empOut,workhours,workhoursTotal,workhoursLate,workhoursLateTotal,overtime,minuteOvertime,Reason,undertime,undertimeTotalMin,status,PayslipFROMattendance` WHERE Date BETWEEN LIKE '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "%' AND Date LIKE'" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "%'", con);

SELECT 后面,FROM 之前和之后有一個空格,在最后一個 Like 中,請檢查你在 MySQL 中的代碼,然后將其復制到 c# 中。 應該是這樣的:

    MySqlDataAdapter sda = new MySqlDataAdapter("SELECT empID, Name, Date, empIn, empOut, workhours, workhoursTotal, workhoursLate, workhoursLateTotal, overtime, minuteOvertime, Reason, undertime, undertimeTotalMin, status, Payslip 
FROM Mattendance WHERE Date BETWEEN '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' AND '" + dateTimePicker2.Value.ToString("yyyy-MM-dd") + "' ", con);

可能有更多的語法錯誤,但你可以自己檢查它們。

第三個在日期時間中使用“Like”是沒有意義的,所以只使用 BETWEEN。

最后在日期時間使用它來避免格式​​問題。

dateTimePicker1.Value.ToString(CultureInfo.InvariantCulture)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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