#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();