Как использовать запрос на выборку со значением текстового поля для сравнения со столбцом ДАТА базы данных - PullRequest
0 голосов
/ 29 сентября 2018

Моя разметка .aspx:

<ajaxToolkit:CalendarExtender ID="CalendarExtender1" PopupButtonID="imgpopup" runat="server" TargetControlID="TextBox11" Format="MM-yyyy" DefaultView="Months" />

<asp:TextBox ID="TextBox11" runat="server">
</asp:TextBox>

.aspx.cs код позади:

string text = "Textbox11.Text";

string s = "SELECT * FROM Stock WHERE MONTH(Date) = 09 AND YEAR(Date) = 2018";

SqlCommand cmd = new SqlCommand(s, conn);
SqlDataAdapter dr = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
dr.Fill(dt);

GridView1.DataSource = dt;
GridView1.DataBind();

Это запрос, который я получил везде в сети, но я не хочууказать фиксированную дату .... Я хочу разрешить пользователю выбирать текст, и в соответствии с этой датой должен работать запрос на выборку

Пожалуйста, помогите мне с проблемой, так как я новичок здесь.

Пожалуйста, прости меня, если я снова задал тот же вопрос, который ранее задавал кто-то еще

1 Ответ

0 голосов
/ 29 сентября 2018

Я предлагаю параметризованный запрос с включающей начальной датой и исключительной конечной датой для запросов диапазона дат.Лучше избегать применения функций к столбцам SQL Server в предложении WHERE, поскольку это препятствует эффективному использованию индексов (если таковые имеются).Например:

    var date = DateTime.Now;
    if(!DateTime.TryParse(Textbox11.Text, out date))
    {
        //invalid date handing
        return;
    }
    var startDate = new DateTime(date.Year, date.Month, 1);
    var endDate = startDate.AddMonths(1);

    string s = "SELECT * FROM Stock WHERE Date >= @StartDate AND Date < @EndDate;";

    SqlCommand cmd = new SqlCommand(s, conn);
    SqlDataAdapter dr = new SqlDataAdapter(cmd);
    cmd.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = startDate;
    cmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = endDate;
    DataTable dt = new DataTable();
    dr.Fill(dt);

Также рассмотрите возможность указания списка столбцов объяснения только с необходимыми столбцами, а не SELECT *, поскольку это уменьшит ненужную передачу данных и даст SQL Server больше возможностей оптимизации запросов.

Имейте в виду, что разбор даты произвольной формы неоднозначен.Было бы лучше ограничить ввод данных пользователем определенным форматом даты или использовать элемент управления выбора даты, который сделает это за вас, разрешив TryParseExact на стороне сервера.

...