2016-08-01 26 views
0

Meine Daten werden in diesem Format gespeichert mm/dd/yyyy ... und ich möchte meine Daten nur mit dem Monat zu vergleichen .... Ich meine, ich möchte Zeigen Sie alle Daten in Bezug auf diesen Monat an, die von datetimepicker ausgewählt wurden.Vergleicht man MM/TT/JJJJ mit dem Monat nur in SQL Server-Datenbank mit C#

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Coregen\documents\visual studio 2013\Projects\piechart\piechart\sale.mdf;Integrated Security=True"); 
con.Open(); 

SqlCommand cmd = new SqlCommand(); 
cmd.CommandText = "SELECT * FROM Tab_n WHERE Date='" + this.dateTimePicker1.Value + "'"; // 
cmd.Connection = con; 

SqlDataAdapter sda = new SqlDataAdapter(); 
sda.SelectCommand = cmd; 
DataTable dt = new DataTable(); 
sda.Fill(dt); 

BindingSource bs = new BindingSource(); 
bs.DataSource = dt; 

dataGridView1.DataSource = bs; 
sda.Update(dt); 

con.Close(); 
+1

Ihr Datum ist im String-Format in Ihrem DB? Datepicker gibt Ihren 'DateTime' Typ zurück? –

+1

Was ist der Datentyp der Spalte? Ist es Varchar oder Datetime? – juharr

+2

Wenn Sie diese Anwendung nicht nur für ein Jahr verwenden möchten, sollten Sie nicht den Monat und das Jahr verwenden. Alle Daten außer dem 29. Februar treten jedes Jahr auf (es sei denn, Sie verwenden den Maya-Kalender, der 2012 endete)? – Kevin

Antwort

0

Sie etwas in dieser Richtung verwenden:

cmd.CommandText = "SELECT Column_1, Column_2 FROM Tab_n WHERE DATEPART(Month,Date) ='" + this.dateTimePicker1.Value.Month + "'"; 

Sie diese SQLParameter unter Verwendung vereinfachen kann:

cmd.Parameters.AddWithValue("@Date_Of_Something",this.dateTimePicker1.Value.Month); 

bearbeiten: Da Sie Jahr vergleichen wollen, Sie müssen einen weiteren where Zustand hinzufügen. Dies wird wieder die DATEPART Funktion nutzen.

Da ich davon ausgehe, dass Sie den Vorschlag, parametrisierte Abfragen zu verwenden, inzwischen angenommen haben, wird der folgende Anhang mit diesem Ansatz beantwortet.

cmd.CommandText = "SELECT Column_1, Column_2 FROM Tab_n WHERE DATEPART(Month,Date) = @DatePicker_Month AND DATEPART(Year,Date) = @DatePicker_Year"; 

Sie werden in diesem Fall zwei Parameter:

cmd.Parameters.AddWithValue("@DatePicker_Month",this.dateTimePicker1.Value.Month); 
cmd.Parameters.AddWithValue("@DatePicker_Year",this.dateTimePicker1.Value.Year); 

Dies ist zum Beispiel, ermöglicht es Ihnen, für die Jahresergebnisse für den 5. Monat (von datepart_month Variableangegeben) zu holen 2016 (angegeben durch Variable datepart_year).

Hoffe, das hilft !!!

+0

Vielen Dank für die Hilfe, aber ich möchte Jahr auch vergleichen ... sorry ich vergaß zu erwähnen ... können Sie Bitte helfen Sie mir auf diese Weise –

+0

@GABBAS Ich habe meine Antwort bearbeitet. Siehe die obige Bearbeitung. –

1

Ich denke, mit BETWEEN in Ihrer Abfrage ist die beste Lösung. Zuerst finden Sie zu Beginn und Ende des Monats Termine und man sie dann in BETWEEN Betreiber setzen:

// get DatePicker selected year and month 
int year = dateTimePicker1.Value.Year; 
int month = dateTimePicker1.Value.Month; 

// start from the first day of the month 
int startDay = 1; 
// find the last day of selected month 
int endDay = DateTime.DaysInMonth(year, month); 

DateTime startDate = new DateTime(year, month, startDay); 
DateTime endDate = new DateTime(year, month, endDay); 

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Coregen\documents\visual studio 2013\Projects\piechart\piechart\sale.mdf;Integrated Security=True"); 
con.Open(); 
SqlCommand cmd = new SqlCommand(); 

cmd.CommandText = "SELECT * FROM Tab_n WHERE Date BETWEEN @startDate AND @endDate"; 
cmd.Connection = con; 
cmd.Parameters.AddWithValue("@startDate", startDate); 
cmd.Parameters.AddWithValue("@endDate", endDate); 

SqlDataAdapter sda = new SqlDataAdapter(); 
sda.SelectCommand = cmd; 
DataTable dt = new DataTable(); 
sda.Fill(dt); 

BindingSource bs = new BindingSource(); 
bs.DataSource = dt; 

dataGridView1.DataSource = bs; 
sda.Update(dt); 

con.Close();