2013-10-30 95 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.

相關問題