Wählen Sie das date aus dem sqlserver mit c # windows Form datetime picker tools aus

Sehr geehrtes Team Ich möchte data date zu datieren von sqlserver date time Spalten mit c # datetime Picker-Tools in c # Windows Formular Anwendung so gegeben unten Abfrage ist das Abrufen von data zwischen verschiedenen date, aber wenn ich die Auswahl der gleichen date Abfrage ist nicht die Rückgabe von data so bitte helfen, um Löse das Problem.

public void TListByDate() { try { dataGridView1.Rows.Clear(); SqlCommand cmd = new SqlCommand("Select Pur_Entry_Date,Pur_Invoice_No,Supplier_Bill_No,Product.Item_Name,Pur_Item_Batch_No,Item_Batch_Expiry,Pur_Item_PackQuantity,Pur_Bonus_LooseQuantity,MRP_Final,Purchase_Pack_Price,Discount_Percentage,Extra_Discount_Percentage,SalesTax_Percent,Pur_Item_Total_Amount from purchase LEFT OUTER JOIN product on Purchase.Item_Code = Product.Item_Code where Purchase.Pur_Entry_Date BETWEEN'" + dateTimePicker1.Value.ToString() + "' AND '" + dateTimePicker2.Value.ToString() + "' order by purchase.Pur_Entry_Date", ConnectionDAC.GetConnection()); SqlDataAdapter adp = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); adp.Fill(dt); if (dt.Rows.Count == 0) { label8.Text = "Zero Rows found"; } else { dataGridView1.Rows.Clear(); int totalrows = dt.Rows.Count; label8.Text = totalrows.ToString(); for (int i = 0; i <= dt.Rows.Count - 1; i++) { DataRow dr = dt.Rows[i]; dataGridView1.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5], dr[6], dr[7], dr[8], dr[9], dr[10], dr[11], dr[12], dr[13]); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void button2_Click(object sender, EventArgs e) { TListByDate(); } 

Hier meine Meinungen;

  1. Sie sollten immer parametrisierte Abfragen verwenden . Diese Art von String-Verkettungen sind offen für SQL Injection Angriffe.
  2. Wenn Ihr Purchase.Pur_Entry_Date datetime , übergeben Sie es ein System.DateTime anstelle von string da datetime mit System.DateTime in CLR-Seite datetime ist .
  3. Sie sollten using statement verwenden , um Ihre SqlCommand und SqlDataAdapter automatisch zu entsorgen.

Auch dein

 int totalrows = dt.Rows.Count; label8.Text = totalrows.ToString(); for (int i = 0; i <= dt.Rows.Count - 1; i++) { DataRow dr = dt.Rows[i]; dataGridView1.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5], dr[6], dr[7], dr[8], dr[9], dr[10], dr[11], dr[12], dr[13]); } 

scheint mir ziemlich unnötig zu sein, weil man so aussieht, dass man versucht, jeden Zellwert eins nach dem anderen zu binden. Statt dessen, nur, um Ihre dt an seine DataSource Eigenschaft wie;

 dataGridView1.DataSource = dt; 

Als endgültige Sache, ich denke, Ihr Code wäre besser als;

 var command = @"Select Pur_Entry_Date, Pur_Invoice_No, Supplier_Bill_No, Product.Item_Name, Pur_Item_Batch_No, Item_Batch_Expiry, Pur_Item_PackQuantity, Pur_Bonus_LooseQuantity, MRP_Final, Purchase_Pack_Price, Discount_Percentage, Extra_Discount_Percentage, SalesTax_Percent, Pur_Item_Total_Amount from purchase LEFT OUTER JOIN product on Purchase.Item_Code = Product.Item_Code where Purchase.Pur_Entry_Date BETWEEN @p1 AND @p2 order by purchase.Pur_Entry_Date"; using(var cmd = new SqlCommand(cmd, ConnectionDAC.GetConnection())) { cmd.Parameters.Add("@p1", SqlDbType.DateTime).Value = dateTimePicker1.Value; cmd.Parameters.Add("@p2", SqlDbType.DateTime).Value = dateTimePicker2.Value; using(var adp = new SqlDataAdapter(cmd)) { adp.Fill(dt); } if (dt.Rows.Count == 0) { label8.Text = "Zero Rows found"; } else { dataGridView1.Rows.Clear(); label8.Text = totalrows.ToString(); dataGridView1.DataSource = dt; } }