-2
        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);我想消除这个错误。我正在等待答复。谢谢

4

2 回答 2

5

如果您在构建后查看生成的 SQL 字符串,您会发现问题所在。日期文字周围没有引号,因此 SQL 将带有斜杠的日期视为数学方程式。

您应该考虑使用存储过程或参数化 SQL 字符串来防止此问题。你可以在这个网站上搜索“sql注入漏洞”,看到很多在SQL中使用参数的例子。 这是一个相关的问题。

于 2013-10-30T21:16:21.057 回答
2

您在 . 之前和之后缺少一些“''” 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;
于 2013-10-30T21:41:50.483 回答