21. marts 2006 - 12:22
Der er
28 kommentarer og 1 løsning
Søgning i et dato range.
Jeg skal lave en søgefunktion hvor søgekreteriet er et dato range, der skal indtastes en start og slutdato, har lidt problemer med at komme igang. Resultatet skal hentes fra en sqldatabase.
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
21. marts 2006 - 12:26
#1
et eksempel: År <asp:DropDownList ID="drpansaettelsesAar" runat="server" AutoPostBack=true OnSelectedIndexChanged="drpansaettelsesdato_SelectedIndexChanged" ></asp:DropDownList> Måned <asp:DropDownList ID="drpansaettelsesMaaned" AutoPostBack=true OnSelectedIndexChanged="drpansaettelsesdato_SelectedIndexChanged" runat="server"></asp:DropDownList> Dag <asp:DropDownList ID="drpansaettelsesDag" runat="server"></asp:DropDownList> <br /><br /> Vælg en evt fratrædelses dato:<br /> År <asp:DropDownList ID="drpfratraedelsesAar" runat="server" AutoPostBack=true OnSelectedIndexChanged="drpfratraedelsesdato_SelectedIndexChanged" ></asp:DropDownList> Måned <asp:DropDownList ID="drpfratraedelsesMaaned" AutoPostBack=true OnSelectedIndexChanged="drpfratraedelsesdato_SelectedIndexChanged" runat="server"></asp:DropDownList> Dag <asp:DropDownList ID="drpfratraedelsesDag" runat="server"></asp:DropDownList> <br /><br />
21. marts 2006 - 12:27
#2
i codebehind skal du bruge: private void GenererDatoDrpLister() { //ansættelsesdato dropdownlister drpansaettelsesAar.Items.Add(new ListItem("")); for (int i = 0; i >= -50; i--) { drpansaettelsesAar.Items.Add(new ListItem("" + (DateTime.Now.Year + i) + "")); } drpansaettelsesMaaned.Items.Add(new ListItem("")); for (int j = 1; j <= 12; j++) { if (j.ToString().Length == 1) drpansaettelsesMaaned.Items.Add(new ListItem("0" + j)); else drpansaettelsesMaaned.Items.Add(new ListItem(j.ToString())); } drpansaettelsesDag.Items.Add(new ListItem("")); for (int k = 1; k <= 30; k++) { if (k.ToString().Length == 1) drpansaettelsesDag.Items.Add(new ListItem("0" + k)); else drpansaettelsesDag.Items.Add(new ListItem(k.ToString())); } //fratrædelsesdato dropdownlister drpfratraedelsesAar.Items.Add(new ListItem("")); for (int i = 5; i >= 0; i--) { drpfratraedelsesAar.Items.Add(new ListItem("" + (DateTime.Now.Year + i) + "")); } drpfratraedelsesMaaned.Items.Add(new ListItem("")); for (int j = 1; j <= 12; j++) { if (j.ToString().Length == 1) drpfratraedelsesMaaned.Items.Add(new ListItem("0" + j)); else drpfratraedelsesMaaned.Items.Add(new ListItem(j.ToString())); } drpfratraedelsesDag.Items.Add(new ListItem("")); for (int k = 1; k <= 30; k++) { if (k.ToString().Length == 1) drpfratraedelsesDag.Items.Add(new ListItem("0" + k)); else drpfratraedelsesDag.Items.Add(new ListItem(k.ToString())); } } protected void drpansaettelsesdato_SelectedIndexChanged(object sender, EventArgs e) { if (drpansaettelsesAar.SelectedValue.Length > 0 && drpansaettelsesMaaned.SelectedValue.Length > 0) { drpansaettelsesDag.Items.Clear(); drpansaettelsesDag.Items.Add(new ListItem("")); for (int l = 1; l <= DateTime.DaysInMonth(int.Parse(drpansaettelsesAar.SelectedValue), int.Parse(drpansaettelsesMaaned.SelectedValue)); l++) { if (l.ToString().Length == 1) drpansaettelsesDag.Items.Add(new ListItem("0" + l)); else drpansaettelsesDag.Items.Add(new ListItem(l.ToString())); } } } protected void drpfratraedelsesdato_SelectedIndexChanged(object sender, EventArgs e) { if (drpfratraedelsesAar.SelectedValue.Length > 0 && drpfratraedelsesMaaned.SelectedValue.Length > 0) { drpfratraedelsesDag.Items.Clear(); drpfratraedelsesDag.Items.Add(new ListItem("")); for (int l = 1; l <= DateTime.DaysInMonth(int.Parse(drpfratraedelsesAar.SelectedValue), int.Parse(drpansaettelsesMaaned.SelectedValue)); l++) { if (l.ToString().Length == 1) drpfratraedelsesDag.Items.Add(new ListItem("0" + l)); else drpfratraedelsesDag.Items.Add(new ListItem(l.ToString())); } } }
21. marts 2006 - 12:27
#3
I page load ligger du : if (!Page.IsPostBack) { GenererDatoDrpLister(); }
21. marts 2006 - 12:29
#4
DateTime Start = DateTime.Parse("" + drpansaettelsesDag.SelectedValue + "-" + drpansaettelsesMaaned.SelectedValue + "-" + drpansaettelsesAar.SelectedValue); DateTime Slut DateTime.Parse("" + drpfratraedelsesDag.SelectedValue + "-" + drpfratraedelsesMaaned.SelectedValue + "-" + drpfratraedelsesAar.SelectedValue) string sql = "SELECT * FROM Tabel WHERE Dato BETWEEN "+Start+"AND"+Slut+"";
21. marts 2006 - 12:36
#5
For lige at at være sikker på at det forstås korrekt, det jeg skal lave er at man i to textboxes skal tastes henholdsvis start og slutdato. Resultatet af søgning skal hentes ud af en sqldb.
21. marts 2006 - 12:38
#6
Ok du kom mig forkøbet mht. til sql statement.. Kigger lige nærmere på det.
21. marts 2006 - 13:03
#7
hvis det er med textbokse så er det DateTime Start = DateTime.Parse(TextBox1.Text): DateTime Slut = DateTime.Parse(TextBox2.Text):
21. marts 2006 - 13:13
#8
Skulle nedenstående ikke virke? jeg får en compileringsfejl der siger: 'System.DateTime' does not contain a definition for 'Text' private void Button1_Click(object sender, System.EventArgs e) { if (!(Page.IsValid)) { return; } DateTime Start = DateTime.Parse(Start.Text); DateTime Slut = DateTime.Parse(Slut.Text); string strConnection; string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start+ "AND" +Slut+""; strConnection = "user id=Webuser;password=xxxxx;"; strConnection += "initial catalog=log;server=sqlNY;"; strConnection += "Connect Timeout=30"; SqlConnection conn = new SqlConnection( strConnection ); SqlCommand cmd = new SqlCommand( Sql, conn ); DataSet ds = new DataSet(); SqlDataAdapter adpt = new SqlDataAdapter( cmd ); cmd.Connection.Open(); try { adpt.Fill( ds ); } finally { cmd.Connection.Close(); } DataGrid1.DataSource = ds; DataGrid1.DataBind(); } }
21. marts 2006 - 13:20
#9
Start.Text og Slut.Text skal komme fra dine textbokse. kald dem evt txtStart og txtSlut
21. marts 2006 - 13:28
#10
Det dog lidt, men når jeg forsøger at søge på en dato kommer følgende fejl: Line 1: Incorrect syntax near '00'. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '00'. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace: [SqlException: Line 1: Incorrect syntax near '00'.] System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) +742 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) +45 System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +5 System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +304 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +77 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +38 Rensningslog.WebForm3.Button1_Click(Object sender, EventArgs e) in \\nzdev\rensningslog\soeg_dato.aspx.cs:105 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +58 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33 System.Web.UI.Page.ProcessRequestMain() +1292
21. marts 2006 - 13:29
#11
prøv lige med string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start.ToString()+ "AND" +.ToString()
21. marts 2006 - 13:30
#12
string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start.ToString()+ "AND" +Slut.ToString()+"";
21. marts 2006 - 13:35
#13
Det gør ingen forskel.. Det er samme fejl der kommer.
21. marts 2006 - 13:39
#14
hvordan indskriver du datoen ?
21. marts 2006 - 13:40
#15
20-03-2006
21. marts 2006 - 13:48
#16
private void Button1_Click(object sender, System.EventArgs e) { if (!(Page.IsValid)) { return; } DateTime Start; string[] tmpStart = txtStart.Split('-'); Start.Day = int.Parse(tmpStart[0] ); Start.Month= int.Parse(tmpStart[1] ); Start.Year= int.Parse(tmpStart[2] ); DateTime Slut; string[] tmpSlut = txtSlut.Split('-'); Slut.Day = int.Parse(tmpSlut[0] ); Slut.Month= int.Parse(tmpSlut[1] ); Slut.Year= int.Parse(tmpSlut[2] ); string strConnection; string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start+ "AND" +Slut+""; strConnection = "user id=Webuser;password=xxxxx;"; strConnection += "initial catalog=log;server=sqlNY;"; strConnection += "Connect Timeout=30"; SqlConnection conn = new SqlConnection( strConnection ); SqlCommand cmd = new SqlCommand( Sql, conn ); DataSet ds = new DataSet(); SqlDataAdapter adpt = new SqlDataAdapter( cmd ); cmd.Connection.Open(); try { adpt.Fill( ds ); } finally { cmd.Connection.Close(); } DataGrid1.DataSource = ds; DataGrid1.DataBind(); } }
21. marts 2006 - 13:56
#17
Så får nedenstående fejl :-( \Soeg_Dato.aspx.cs(91): 'System.Web.UI.WebControls.TextBox' does not contain a definition for 'Split' \Soeg_Dato.aspx.cs(92): Property or indexer 'System.DateTime.Day' cannot be assigned to -- it is read only \Soeg_Dato.aspx.cs(93): Property or indexer 'System.DateTime.Month' cannot be assigned to -- it is read only \Soeg_Dato.aspx.cs(94): Property or indexer 'System.DateTime.Year' cannot be assigned to -- it is read only
21. marts 2006 - 14:13
#18
Sorry erstat string[] tmpStart = txtStart.Split('-'); med string[] tmpStart = txtStart.Text.Split('-');
21. marts 2006 - 14:16
#19
Ok men hva så med de tre her?? \Soeg_Dato.aspx.cs(92): Property or indexer 'System.DateTime.Day' cannot be assigned to -- it is read only \Soeg_Dato.aspx.cs(93): Property or indexer 'System.DateTime.Month' cannot be assigned to -- it is read only \Soeg_Dato.aspx.cs(94): Property or indexer 'System.DateTime.Year' cannot be assigned to -- it is read only
21. marts 2006 - 16:56
#20
private void Button1_Click(object sender, System.EventArgs e) { if (!(Page.IsValid)) { return; } } FormatProvider culture = new CultureInfo("da-DK", true); DateTime Start =DateTime.Parse(txtStart.Text,culture, DateTimeStyles.NoCurrentDateDefault); DateTime Slut=DateTime.Parse(txtSlut.Text,culture, DateTimeStyles.NoCurrentDateDefault); string strConnection; string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start+ "AND" +Slut+""; strConnection = "user id=Webuser;password=xxxxx;"; strConnection += "initial catalog=log;server=sqlNY;"; strConnection += "Connect Timeout=30"; SqlConnection conn = new SqlConnection( strConnection ); SqlCommand cmd = new SqlCommand( Sql, conn ); DataSet ds = new DataSet(); SqlDataAdapter adpt = new SqlDataAdapter( cmd ); cmd.Connection.Open(); try { adpt.Fill( ds ); } finally { cmd.Connection.Close(); } DataGrid1.DataSource = ds; DataGrid1.DataBind(); } }
22. marts 2006 - 07:32
#21
Jeg fatter det ikke, den bliver ved med at komme med nedenstående fejl, har du nogen ide om hvad det er der laver fejlen?? Line 1: Incorrect syntax near '00'. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '00'.
22. marts 2006 - 08:09
#22
Kan det være sql strengen der er noget galt med??
22. marts 2006 - 10:08
#23
prøv med string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN '"+Start+ "' AND '" +Slut+"'";
22. marts 2006 - 11:00
#24
Det hjalp, det var dejligt.. Takker mange gange for hjælpen, det var en lang omgang.
22. marts 2006 - 11:03
#25
Langtfra den værste jeg har prøvet:) smider lige et svar :)
22. marts 2006 - 11:10
#26
Ok så er jeg mere rolig, jeg var begyndt at blive bekymrede for om der var point nok i det her spm. :-)
22. marts 2006 - 11:26
#27
Jojo det er helt fint :) Men det er en personlig vurdering hvor mange points man vil give ud. Nogen vil kun give 0 :(
22. marts 2006 - 12:37
#28
Ja det er rigtig nok, men får at få hjælp bliver man jo nød til af give lidt point..
22. marts 2006 - 12:46
#29
helt enig :)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.