26. april 2006 - 08:53Der er
58 kommentarer og 1 løsning
Søgning i et dato range.
Jeg har lavet en søgefunktion hvor der kan søges imellem to datoer, den virker sådan set, men når man ønsker at søge over to måneder f.eks. 10-03-2006 til 20-04-2006 virker det ikke.
koden ser således ud:
private void Button1_Click(object sender, System.EventArgs e) { if (!(IsPostBack)) { return; } DateTime Start = DateTime.Parse(txtStart.Text); DateTime Slut = DateTime.Parse(txtSlut.Text);
string strConnection; string Sql = "SELECT * FROM dbo.Data WHERE Kontrol=@Kontrol AND Date BETWEEN '"+Start+ "' AND '" +Slut+"' ORDER BY Dato, Time ASC";
CONVERT(DATETIME,'10-03-2006',105) string Sql = "SELECT * FROM dbo.Data WHERE Kontrol=@Kontrol AND CONVERT(DATETIME,Dato,105)BETWEEN '"+Start+ "' AND '" +Slut+"' ORDER BY CONVERT(DATETIME,Dato,105), Time ASC";
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
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: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
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: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.] System.Data.SqlClient.SqlDataReader.Read() +176 System.Data.Common.DbDataAdapter.FillLoadDataRow(SchemaMapping mapping) +175 System.Data.Common.DbDataAdapter.FillFromReader(Object data, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) +260 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) +129 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:154 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
Det er som om at der kun kigges på de to første ciffer i datoen, når der søges fra 10-04-2006 til 25-04-2006, kommer de rigtige records med, men dem fra den foregående måned kommer også med. eks. 10-03-2006 til 25-03-2006.
Det virker stadig ikke, hvis jeg benytter det feltet med DataType "DateTime" får den samme fejl: The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
Hvis jeg benytter feltet med DataType "Char" kan den ikke sorterer tabellen. Kan man benytte en anden måde at søge på??
hvordan kan du få "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value." når du ikke laver en conversion ?
string Sql = "SELECT * FROM dbo.Data WHERE Date BETWEEN >= '"+Start.ToString("yyMMdd")+ "'"; eller string Sql = "SELECT * FROM dbo.Data WHERE Dato BETWEEN >= '"+Start+ "'";
Anyway når du skriver datetime'en som yyMMdd skal du jo også konvertere den tilbage til datetime sådan. Dvs i stedet for at skrive CONVERT(DATETIME,Date,105)
Grunden til at jeg både har Date og Dato er at jeg ikke kan få det til og virke og har derfor valgt at bruge en streng til at sortere og søge datoerne efter(hvilket virker), det vil ville bare være ganske rart at få det til at virke korrekt.
Ovenstående fungere helt fint, så det er vidst på tide at få afsluttet dette. Et hurtigt tillægsspørgsmål: Hvordan får jeg ovenstående kode til at kigge et døgn tilbage? Der skal ikke skrives nogen dato, der skal når der trykkes på knappen trækkes data som er registreret det sidste døgn.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.