11. februar 2009 - 17:53Der er
27 kommentarer og 1 løsning
If sætning
hej jeg prøver at lave en if sætning, hvor der også er kaldt på min ms sql database i forvejen. og så vil jeg have noget til at ske hvis system tiden er det samme som tiden i min db. Men jeg ved ikke om man kan skrive kollonne navnet i if sætningen eller hvordan man ellers skulle skrive det.
kollonnen i min db hedder tid. men tid kan ikke bare skrives sådan i if sætningen.
Sådan ser koden ud som jeg har skrevet det:
objcmd.CommandText = "SELECT * FROM PROGRAM WHERE CONVERT(VARCHAR, date, 105) = CONVERT(VARCHAR, GETDATE(), 105)";
if (DateTime.Now.Hour == tid ) { test.Text = "test 1"; } else { ikke.Text = "test 2"; }
Jeg håber i forstår hvad jeg mener og i kan hjælpe mig?
objcmd.CommandText = "SELECT tid FROM PROGRAM WHERE CONVERT(VARCHAR, date, 105) = CONVERT(VARCHAR, GETDATE(), 105)"; DateTime tid = (DateTime)objcmd.ExecuteScalar(); if (DateTime.Now.Hour == tid )
Det virker stadig ikke, der kommer en rød streg under(DateTime.Now.Hour == tid)
så den er nok stadig skrevet forkert.
Men nu ser det sådan ud:
objcmd.CommandText = "SELECT * FROM PROGRAM WHERE CONVERT(VARCHAR, date, 105) = CONVERT(VARCHAR, GETDATE(), 105)"; DateTime tid = (DateTime)objcmd.ExecuteScalar();
Ok, men nu kommer der en fejl når jeg prøver at se siden, den skriver: ExecuteScalar requires an open and available Connection. The connection's current state is closed.
Jeg har prøvet at placere kodestumpen lidt forskellige steder på siden, men kan ikke rigtigt få det til at virke.
Kan du overskue hvor koden skal ind henne, så ser alt min kode ud:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; using System.Configuration; using System.Collections; using System.Web.Security; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page { SqlConnection objconn = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ToString());
Ok, hvad mener du med at udskriv noget mere information?
Nu har jeg ihvertfald prøvet at ændre if sætningen til if (DateTime.Now.Hour > 3)
og det virker, så den registrere åbenbart at klokken er over 3 men så er der nok problemer med at den ikke registrere hvad tiden er i min db. Så jeg ved ikke om det her er skrevet rigtigt: == tid.Hour
Den kan jo godt registrere hvad system tiden er, bare ikke i min db.
Jeg har også lige svært ved at se hvad problemet kan være. :-(
Der står hele tiden at den sammenligner med kl. 21:00 jeg har også prøvet at skrive minute istedet for hour men der står stadig 21:00
Jeg startede på at teste den da kl. var 20:58 og der stod så at vi sammenligner 20 med 21 så der står hele tiden 21, jeg aner ikke hvorfår.
jeg kommer også i tanke om, der er jo flere poster i min db, alle sammen med forskellig tid, hvordan skulle den vide hvilken en den skulle sammenlignes med.
Ved du hvad jeg mener? Og kan det være det, der er problemet?
Jeg tænkte på at hvis jeg ændre min sql statement så den kun går efter tiden sådan:
objcmd.CommandText = "SELECT tid FROM PROGRAM WHERE CONVERT(VARCHAR, tid, 108) = CONVERT(VARCHAR, GETDATE(), 108)";
Skal jeg så ikke også ændre DateTime tid = (DateTime)objcmd.ExecuteScalar();
til noget andet, fordi du siger at den kun går efter første kollonne i første række, men det skal den jo ikke hvis den kan finde tiden længere nede på siden.
Jeg vil have sammenlignet alle tiderne med system tiden, og så hvis der er en af dem som er det samme som system tiden, så skal den udskrive testet ellers skal den gøre noget andet.
Men jeg tror det er det jeg gør i if sætningen, men nu skal jeg bare kunne sammenligne med alle tiderne istedet for kun første række. Men jeg ved ikke helt hvordan jeg gør det?
Så skal du enten: - erstatte ExecuteScalar med en ExecuteReader - have en while løkke eller: - putte en betingelse i din WHERE så du kun henter records der matcher dit kriterie
objReader = objcmd.ExecuteReader(); while(objReader.Read()) { DateTime tid = (DateTime)objReader[0]; // test om denne tid opfyler kriterie } objReader.Close();
Men skulle der så ikke stå at den også sammenligner med 15 i denne linje, Vi sammenligner 0 med 13 de er faktisk 17-02-2009 00:47:14 og 02-02-2009 13:00:00
og hvad mener du med: (eller ville hvis der var et test inde i while løkken)
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.