Как разделить DateTime и искать только дату в списке, подключенном к базе данных SQL Server? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь найти в моем заполненном ListView конкретную дату, используя datetimepicker.Я только хочу выполнить поиск и получить результат в части даты компонента DateTime.

Я пытался преобразовать мой datetimepicker (dtpStartDate) в короткую строку даты в моем коде кнопки поиска (мой текущий метод ниже выдаетошибка "преобразование типа данных varchar в тип данных DateTime привело к значению вне допустимого диапазона").

Я также пытался

dtpStartDate = Convert.ToDateTime(System.DateTime.Now.ToShortDateString("dd-MM-yyyy"));

но ToShortDateString подчеркивается красным.

Я также пытался

string dt = dtpStartDate.Value.ToShortDateString();

, затем искал значение dt, но это та же самая ошибка varchar, что и выше.

Это мой код для отображения всех продаж из базы данных SQL Server в моем списке просмотра:

private void DisplaySales()
{
        string selectQuery;

        selectQuery = "SELECT Sales.SaleID, Customers.CustomerID, Products.ProductID, ";
        selectQuery = selectQuery + "Sales.Payable, Sales.StartDate ";  
        selectQuery = selectQuery + "FROM Sales INNER JOIN ";
        selectQuery = selectQuery + "Customers ON Sales.CustomerID = Customers.CustomerID ";
        selectQuery = selectQuery + "INNER JOIN Products ON Sales.ProductID = Products.ProductID ";
        selectQuery = selectQuery + " " + GlobalVariables.saleSearchCriteria;

        SqlConnection conn = ConnectionManagerClass.ConnectionManager.DatabaseConnection();
        SqlDataReader rdr = null;

        try
        {
            SqlCommand cmd = new SqlCommand(selectQuery, conn);
            conn.Open();

            rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                // Define the list items
                Business_Logic_Layer.SaleInfoClass sale = new Business_Logic_Layer.SaleInfoClass(int.Parse(rdr["SaleID"].ToString()),
                                     (rdr["CustomerID"].ToString()),
                                     (rdr["ProductID"].ToString()),
                                     (rdr["Payable"].ToString()),
                                     (DateTime.Parse(rdr["StartDate"].ToString())));

                ListViewItem lvi = new ListViewItem(sale.SaleID.ToString());
                lvi.SubItems.Add(sale.CustomerID.ToString());
                lvi.SubItems.Add(sale.ProductID.ToString());
                lvi.SubItems.Add(sale.Payable);
                lvi.SubItems.Add(sale.StartDate.ToString());

                lvSales.Items.Add(lvi);
            }

            if (rdr != null)
                rdr.Close();

            conn.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Unsuccessful" + ex);
        }
}

Это мой код для добавления продажи в базу данных:

private void btnSave_Click(object sender, EventArgs e)
{
        Business_Logic_Layer.SaleInfoClass sale = new Business_Logic_Layer.SaleInfoClass(GlobalVariables.selectedSaleID, txtCustomerID.Text,
                                                   lbProductID.Items[cbProductID.SelectedIndex].ToString(),
                                                   cbPayable.Text, dtpStartDate.Value);
        string addQuery;

        if (GlobalVariables.selectedSaleID == 0)
        {
            addQuery = "sp_Sales_CreateSale";
        }
        else
        {
            addQuery = "sp_Sales_UpdateSale";
        }

        SqlConnection conn = ConnectionManagerClass.ConnectionManager.DatabaseConnection();
        conn.Open();

        SqlCommand cmd = new SqlCommand(addQuery, conn);
        cmd.CommandType = CommandType.StoredProcedure;

        if (GlobalVariables.selectedSaleID != 0)
        {
            cmd.Parameters.AddWithValue("@SaleID", sale.SaleID);
        }

        cmd.Parameters.AddWithValue("@CustomerID", sale.CustomerID);
        cmd.Parameters.AddWithValue("@ProductID", sale.ProductID);
        cmd.Parameters.AddWithValue("@Payable", sale.Payable);
        cmd.Parameters.AddWithValue("@StartDate", Convert.ToDateTime(sale.StartDate));

        if (GlobalVariables.selectedSaleID == 0)
        {
            cmd.Parameters.AddWithValue("@NewSaleID", SqlDbType.Int).Direction = ParameterDirection.Output;
        }

        //Confirm user input
        //Cancel if user chooses 'No'
        if (MessageBox.Show("Would you like to save this Sale?", "Confirm", MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
            cmd.Transaction = conn.BeginTransaction();

            cmd.ExecuteNonQuery();

            cmd.Transaction.Commit();
            this.Close();
        }

        conn.Close();

        this.Close();
}

И это мой код для поиска продажи:

private void btnSearch_Click(object sender, EventArgs e)
{
        dtpStartDate.Text = DateTime.Now.ToShortDateString();

        if (rbStartDate.Checked == true)
        {
            GlobalVariables.saleSearchCriteria = "WHERE StartDate = '" + dtpStartDate.Text + "'";
        }

        this.Close();
}

1 Ответ

0 голосов
/ 23 апреля 2019

Попробуй так

string date1 = dtpStartDate.Value.Date.ToString("yyyy-MM-dd HH:mm:ss");
string date2 = dtpStartDate.Value.AddDate(1).Date.ToString("yyyy-MM-dd HH:mm:ss");

"WHERE StartDate >= '" + date1 + "' AND StartDate <  '"+ date2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...