private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
string strcon = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Fellipe\documents\visual studio 2010\Projects\WindowsFormsApplication2\WindowsFormsApplication2\PUBS.MDF;Integrated Security=True;Connect Timeout=30;MultipleActiveResultSets=True;User Instance=True";
SqlConnection conexao = new SqlConnection(strcon);
conexao.Open();
SqlDataAdapter Buscar = new SqlDataAdapter("SELECT ROTA, DOCA FROM Planilha4 WHERE D2 =" + monthCalendar1.SelectionStart.ToString("dd/MM/yyyy"), conexao);
DataTable dt = new DataTable();
Buscar.Fill(dt);
SqlDataAdapter sda = new SqlDataAdapter();
BindingSource bSource = new BindingSource();
bSource.DataSource = dt;
dataGridView1.DataSource = bSource;
sda.Update(dt);
}
错误被抛出Buscar.Fill(dt);
我想消除此错误。我在等待回复。谢谢
如果在构建生成的 SQL 字符串后查看它,您将看到问题。 日期文字周围没有引号,因此 SQL 将带有斜杠的日期视为数学方程。
应考虑使用存储过程或参数化 SQL 字符串来防止此问题。 您可以在此站点上搜索"sql 注入漏洞",以查看在 SQL 中使用参数的大量示例。 这是一个相关的问题。
您在monthCalendar1.SelectionStart.ToString("dd/MM/yyyy")
之前和之后缺少一些" ' ' "。 见下文:
SqlDataAdapter Buscar = new SqlDataAdapter("SELECT ROTA, DOCA FROM Planilha4 WHERE D2 = '" + monthCalendar1.SelectionStart.ToString("dd/MM/yyyy") + "'", conexao);
此外,如果您对 monthCalendar1
等控件有外部依赖,我强烈建议您参数化查询。 下面是一个简单的示例:
string command = "SELECT ROTA, DOCA FROM Planilha4 WHERE D2 = @mnthCalendar";
sqlDA.SelectCommand.Parameters.Add(@mnthCalendar, SqlDbType.DateTime).Value = monthCalendar1.SelectionStart;