база данных между двумя датами из usercontrol

#c#

#c#

Вопрос:

В моей форме я создал пользовательский элемент управления для выбора даты в текстовом поле label в этой форме я помещаю сетку данных, в которой я хочу данные между двумя датами, когда я нажимаю отправить button..my код является:

 private void btnSubmit_Click(object sender, EventArgs e)
            {
                SqlConnection cs = new SqlConnection("Data Source=IRIS-CSG-174;Initial Catalog=library_system;Integrated Security=True");
                cs.Open();
                SqlCommand cmd = new SqlCommand("select * from dbo.lib_issue_details where book_issue_on between'"  userControl11.Text  "'"   "and'"   userControl12.Text   "'", cs);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                DataSet ds = new DataSet();
                da.Fill(ds, "lib_issue_details");
                dataGridView1.DataSource = ds.Tables[0];
                dataGridView1.DataBindings.Add(new Binding("text", ds, "lib_issue_details"));

                cs.Close();


            }
  

Но этот код не предоставляет данные из базы данных, он только дает название столбцов базы данных, когда я выбираю одну из двух дат из datepicker, поскольку мне нужны данные между двумя датами.

Комментарии:

1. У меня была похожая проблема с типом даты.

2. Если вы запустите инструкцию SELECT в SQL Manager, возвращает ли она вам данные обратно?

3. Возможно, данные просто пусты .. добавьте точку останова и посмотрите, каково значение ds.Tables[0].Rows.Count — вероятно, это будет 0.

4. Прежде всего, вы захотите исправить эту уязвимость SQL injection. Запросы, связанные со строками, плохи как с точки зрения безопасности, так и с точки зрения производительности. Во-вторых, каков фактический генерируемый запрос и что он возвращает, когда вы вручную запускаете его в базе данных?

Ответ №1:

Во-первых, это исправит вашу sql-инъекцию, во-вторых, устранит временные ограничения, и вам не нужно создавать привязку, поэтому я удалил эту строку и добавил комментарий

 SqlConnection cs = new SqlConnection("Data Source=IRIS-CSG-174;Initial Catalog=library_system;Integrated Security=True"); 
        cs.Open();
SqlCommand cmd = new SqlCommand("select * from dbo.lib_issue_details where CAST(book_issue_on AS Date) between CAST(@StartDate AS Date) and CAST(@EndDate AS Date)", cs);
cmd.Parameters.Add(new SqlParameter("@StartDate", dateTimePicker1.Text)); //If this is a datetimepicker it would be better to use: dateTimePicker1.Value
cmd.Parameters.Add(new SqlParameter("@EndDate", dateTimePicker1.Text)); //If this is a datetimepicker it would be better to use: dateTimePicker1.Value

SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataTable dt = new DataTable(); DataSet ds = new DataSet(); 
da.Fill(ds, "lib_issue_details"); 
dataGridView1.DataSource = ds.Tables[0]; 

//By Default it will infer the columns from your dataset, otherwise create the columns on your designer
//dataGridView1.DataBindings.Add(new Binding("text", ds, "lib_issue_details"));
cs.Close();