操作数类型冲突:日期与 int C# 不兼容


        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;

最新更新