Avatar billede sbaht Nybegynder
02. maj 2006 - 13:17 Der er 20 kommentarer og
1 løsning

The conversion of a char data type to a datetime data type

Er der nogen der kan fortælle hvad årsagen til denne fejlmeddelelse er?

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value

Den opstår i forbindelse med at der skal søges 1 døgn baglæns i en sql database.
Dato feltet er af DataType "DateTime".
Avatar billede mikkel_sommer Nybegynder
02. maj 2006 - 14:20 #1
Er det noget med at du har et tekstfelt hvori du angiver hvor mange dage tilbage du vil gå, eksempel vis indtaster 1 for at gå en dag tilbage?

I så fald vil jeg tro det er fordi den forsøger at parse char'en 1 til en datetime, løsnigen kunne være noget a la:

DateTime dt = DateTime.Now.AddDays(-double.Parse(textBox1.Text));
Avatar billede sbaht Nybegynder
02. maj 2006 - 15:16 #2
Jeg har ikke noget tekstfelt jeg indtaster i, trækket fra databasen skal ske i det øjeblik jeg trykker på en knap.
Avatar billede mikkel_sommer Nybegynder
02. maj 2006 - 15:28 #3
et DateTime fra databasen som du vil trække en dag fra?
Avatar billede sbaht Nybegynder
03. maj 2006 - 08:35 #4
Ja præcis. Koden ser sådan ud:

private void Button1_Click(object sender, System.EventArgs e)
        {
            if (!(IsPostBack))
            {
                return;
            }
           
            //CultureInfo ci=new CultureInfo("da-DK");
            string strConnection;                       
            string Sql = "SELECT * FROM dbo.log_Data WHERE Kontrol=@Kontrol AND Dato <= '"+ DateTime.Now.AddDays(-1) +"' ORDER BY Dato";
           
            strConnection = "user id=Webuser;password=xxxx;";
            strConnection += "initial catalog=log;server= sqlNY;";
            strConnection += "Connect Timeout=30";

            SqlConnection conn = new SqlConnection( strConnection );
            SqlCommand cmd = new SqlCommand( Sql, conn );
            cmd.Parameters.Add( new SqlParameter( "@Kontrolrum", DropDownList1.SelectedValue ));
                       
            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();
        }
Avatar billede mikkel_sommer Nybegynder
03. maj 2006 - 10:13 #5
Prøv med:

string Sql = "SELECT * FROM dbo.log_Data WHERE Kontrol=@Kontrol AND Dato <= '"+ DateTime.Now.AddDays(-1) +"' ORDER BY Dato";

convert(varchar(10), '" + DateTime.Now + "', 112) <= convert(varchar(10), getdate() - 1, 112)
Avatar billede mikkel_sommer Nybegynder
03. maj 2006 - 10:14 #6
ups sorry mente:

string Sql = "SELECT * FROM dbo.log_Data WHERE Kontrol=@Kontrol AND Dato <= convert(varchar(10), '" + DateTime.Now + "', 112) <= convert(varchar(10), getdate() - 1, 112) ORDER BY Dato";
Avatar billede sbaht Nybegynder
03. maj 2006 - 11:25 #7
Jeg får følgende fejl:

System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '03-05-2006 11:25:15'.
Avatar billede mikkel_sommer Nybegynder
03. maj 2006 - 11:44 #8
Ups det gik vist lidt for stærkt:


string Sql = "
SELECT * FROM dbo.log_Data
WHERE Kontrol=@Kontrol
AND convert(varchar(10), Dato, 112) <= convert(varchar(10), getdate() - 1, 112)
ORDER BY Dato";
Avatar billede mikkel_sommer Nybegynder
03. maj 2006 - 11:47 #9
Husk at fjerne linieskiftene eller brug:

string Sql = @"
SELECT * FROM dbo.log_Data
WHERE Kontrol=@Kontrol
AND convert(varchar(10), Dato, 112) <= convert(varchar(10), getdate() - 1, 112)
ORDER BY Dato";
Avatar billede sbaht Nybegynder
03. maj 2006 - 12:20 #10
Hvis jeg bruger ovenstående får jeg denne fejl:

System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '<'.
Avatar billede mikkel_sommer Nybegynder
03. maj 2006 - 12:54 #11
prøv med single plinger om din kontrol var.

string Sql = @"
SELECT * FROM dbo.log_Data
WHERE Kontrol='@Kontrol'
AND convert(varchar(10), Dato, 112) <= convert(varchar(10), getdate() - 1, 112)
ORDER BY Dato";
Avatar billede sbaht Nybegynder
03. maj 2006 - 12:59 #12
Problemet er stadig det samme.
Avatar billede mikkel_sommer Nybegynder
03. maj 2006 - 13:10 #13
prøv med en statisk værdi i stedet for Kontrol...
Avatar billede sbaht Nybegynder
03. maj 2006 - 13:15 #14
Der skal både kigges på kontrol og dato, da kontrol er en værdi der bliver valgt i en ddl som der så sorteres udfra.
Avatar billede mikkel_sommer Nybegynder
03. maj 2006 - 13:34 #15
jo men kunne du for testens skyld ikke prøve at hardcode kontrol variablen i stedet for at lade den være en parameter.

Har en anelse om at det er der den er gal for:

convert(varchar(10), Dato, 112) <= convert(varchar(10), getdate() - 1, 112)

virker fint her....
Avatar billede sbaht Nybegynder
03. maj 2006 - 13:55 #16
Hvis jeg bruger den sådan her udskrives alt hvad der er i tabellen:

string Sql = "SELECT * FROM dbo.Rensningslog_Data WHERE convert(varchar(10), Dato, 112) <= convert(varchar(10), getdate() - 1, 112) ORDER BY Dato";
Avatar billede mikkel_sommer Nybegynder
03. maj 2006 - 14:35 #17
vel ikke dem hvor Dato kolonens værdi er idag?
Avatar billede sbaht Nybegynder
04. maj 2006 - 07:55 #18
Nej alle før datoen idag.
Avatar billede mikkel_sommer Nybegynder
04. maj 2006 - 09:15 #19
var det ikke også det som dit spørgsmål oprindeligt gik på?
Avatar billede sbaht Nybegynder
04. maj 2006 - 09:46 #20
Nej der skulle søges ét døgn baglæns, jeg har sådan set fået løst problemet. Så du kan jo lige smide et svar.
Avatar billede mikkel_sommer Nybegynder
05. maj 2006 - 13:01 #21
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester