2013-10-30 136 views
-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);我想消除此错误。我在等待答复。 谢谢操作数类型冲突:日期与int不兼容C#

+2

使用参数化查询来传递实际日期而不是尝试连接字符串。 –

+2

引用您的日期以获得简单修复。 –

回答

1

您在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; 
+0

布赖恩非常感谢你 – user2925900

+0

你能更具体吗? – Brian

+0

我设法弄错了 – user2925900

5

如果在构建它之后查看生成的SQL字符串,则会看到问题。日期文字周围没有引号,因此SQL将斜杠当作数学方程式处理日期。

您应该着眼于使用存储过程或参数化的SQL字符串来防止此问题。您可以在此网站上搜索“sql注入漏洞”,以查看在SQL中使用参数的大量示例。 Here's a related question.

相关问题