Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#, MSSQL]

Pagina: 1
Acties:
  • 447 views

  • MarcelF
  • Registratie: Augustus 2008
  • Laatst online: 07-08 11:15
Ik ben bezig een agenda te maken als school project.

Het lukt aardig alleen als ik een sql query wil uitvoeren krijg ik een error met de datum:
" The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."

Ik weet dat het te maken heeft met de format van de datum(kwam ik achter omdat ik wel 12 sept kon invullen maar niet 13 sept.) weet alleen niet precies hoe ik dit moet oplossen :(

De void die ik heb aangemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
      protected void btnCreateAfspraak_Click(object sender, EventArgs e)
        {
            DateTime dateSelected = CreateCalendar.SelectedDate;
            TimeSpan time = TimeSpan.Parse(ddlSelectTijd.SelectedItem.Text);
            DateTime dateForInsert = dateSelected.Add(time);


            if (txtCreateTitel.Text == "")
            {
                lblCreateError.Text = "Titel is leeg";

            }
            else if (txtCreateOmschrijving.Text == "")
            {
                lblCreateError.Text = "Omschrijving is leeg";
            }
            else if (CreateCalendar.SelectedDate < System.DateTime.Today)

            {
                lblCreateError.Text = "Je kan natuurlijk geen afspraak maken in het verleden.";
            }
            else 
            {
                sdsCreate.InsertCommand =
    "INSERT INTO Afspraken(AfspraakTitel, AfspraakOmschrijving, AfspraakOpmerking, AfspraakDatum)VALUES ('" + txtCreateTitel.Text + "','" + txtCreateOmschrijving.Text + "','" + txtCreateOpmerking.Text + "','" + dateForInsert + "')";
                sdsCreate.Insert();


                lblCreateError.Text = "De afspraak is aangemaakt";

AfspraakDatum heeft als Data-type Datetime

ik heb heel veel gelezen op andere forums, maar kom er echt niet uit
Ik gebruik Visual studio 2008 en MSSQL server 2005

Bij voorbaat dank.

Het zal je maar gebeuren...


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 16-11 21:27
Ik zou eens kijken naar Parametrized Queries.
Jouw query is namelijk ook behoorlijk vatbaar voor SQL Injection. (Stel je eens voor dat er een apostrof in de AfspraakTitel of AfspraakOmschrijving komt, wat er dan gebeurd met je query)

[ Voor 13% gewijzigd door Flard op 17-08-2008 15:47 ]


  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
Met parameterized query's kan je het probleem eenvoudig oplossen, is gelijk een stuk veiliger. Wil je het op deze wijze blijven doen kijk dan eens naar de verschillende ToString() methods op de DateTime, zoals ToShortDateString o.i.d.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
De enige 'trefzekere' manier (buiten parametrized queries) is gewoon het ISO yyyymmdd formaat (of yyyy-mm-dd) te gebruiken. Dan weet je zeker dat het, ongeacht de regional settings, altijd goed gaat.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • MarcelF
  • Registratie: Augustus 2008
  • Laatst online: 07-08 11:15
RobIII schreef op zondag 17 augustus 2008 @ 15:53:
De enige 'trefzekere' manier (buiten parametrized queries) is gewoon het ISO yyyymmdd formaat (of yyyy-mm-dd) te gebruiken. Dan weet je zeker dat het, ongeacht de regional settings, altijd goed gaat.
En waar en hoe kan ik deze ISO formaat instellen?

En ik weet dat mijn manier van programmeren heel onveilig is, maar op het moment probeer ik alles aan de praat te krijgen, dat is al een hele opgave voor mij :/
ik weet wat er allemaal kan gebeuren, heb me een tijd geleden ook verdiept in de zogehete "sql injection"

[ Voor 9% gewijzigd door MarcelF op 17-08-2008 15:59 ]

Het zal je maar gebeuren...


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 16-11 21:27
Die iso kun je gewoon meegeven in een override van de ToString-method, al lijkt mij het de moeite waard om even de kijken naar Parametrized Queries, het is in feite gemakkelijker, sneller en is ook met andere datatypes handig.

(In jouw voorbeeld is SQL Injection niet eens een veiligheidslek, maar het kan ook leiden tot andere problemen... In het Nederlands komen apostroffen vrij regelmatig voor, waardoor in jouw code de query niet uitgevoerd kan worden.)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21:24

gorgi_19

Kruimeltjes zijn weer op :9

MarcelF schreef op zondag 17 augustus 2008 @ 15:57:

En ik weet dat mijn manier van programmeren heel onveilig is, maar op het moment probeer ik alles aan de praat te krijgen, dat is al een hele opgave voor mij :/
Daarom, een kant en klaar voorbeeld staat in de FAQ (direct linkje)

Ben je ook gelijk van tig andere problemen af:
* formatting van datums
* SQL Injection attacks
* Speciale karakters goed geescaped

[ Voor 8% gewijzigd door gorgi_19 op 17-08-2008 16:09 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • MarcelF
  • Registratie: Augustus 2008
  • Laatst online: 07-08 11:15
ik ga er vanavond naar kijken :)

[ Voor 190% gewijzigd door MarcelF op 17-08-2008 17:49 ]

Het zal je maar gebeuren...


  • MarcelF
  • Registratie: Augustus 2008
  • Laatst online: 07-08 11:15
Ik heb nu dit alleen heb ik het probleem hoe voer ik de SQL commando uit?
ik krijg een error: "The name 'SqlCommand1' does not exist in the current context"
Dat kan kloppen want die is niet aangemaakt, maar wat als ik hem aanmaak wat moet ik er dan zetten?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
       string sSQL = "INSERT INTO Afspraken(AfspraakTitel, AfspraakOmschrijving, AfspraakOpmerking, AfspraakDatum) " +
              "VALUES (@p_Titel, @p_Omschrijving, @p_Opmerking, @p_Datum)";

                SqlCommand1.CommandText = sSQL;

                SqlCommand1.Parameters.Add("@p_Titel", SqlDbType.VarChar);
                SqlCommand1.Parameters.Add("@p_Omschrijving", SqlDbType.Text);
                SqlCommand1.Parameters.Add("@p_Opmerking", SqlDbType.Text);
                SqlCommand1.Parameters.Add("@p_Datum", SqlDbType.DateTime);

                SqlCommand1.Parameters["@p_Titel"].Value = txtCreateTitel.Text;
                SqlCommand1.Parameters["@p_Omschrijving"].Value = txtCreateOmschrijving.Text;
                SqlCommand1.Parameters["@p_Opmerking"].Value = txtCreateOpmerking;
                SqlCommand1.Parameters["@p_Datum"].Value = dateForInsert;

               sdsCreate.InsertCommand = sSQL;
               sdsCreate.Insert();


Ps. met die "FAQ" snap ik het wel, is tenminste makkelijk uitgelegd :D

Het zal je maar gebeuren...


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:42

Creepy

Tactical Espionage Splatterer

No offence maar als je niet weet hoe je die SqlCommand moet aanmaken of hoe je een andere kan gebruiken, wordt het dan niet eens tijd voor een fatsoenlijke C# / SQL tutorial? Daarin wordt dat vast wel behandeld ;)

Je foutmelding hier dumpen en hopen dat wij het voor je gaan oplossen is niet de bedoeling. Dus wat heb je al geprobeerd om je foutmelding weg te werken?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Kentsfield
  • Registratie: November 2007
  • Laatst online: 11-01-2023
SqlCommand1.ExecuteNonQuery() zou moeten werken denk ik.

Dingen!


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:11
tja, als je gewoon blindweg de code uit de FAQ overneemt, en dan enkel de parameters ofzo vervangt, dan zal het natuurlijk 'niet werken' ....
't Is natuurlijk wel de bedoeling dat je het 'begrijpend leest', en toepast op jouw code....

Programmeren is geen 'papegaaienwerk' ... 't Is natuurljk ook de bedoeling dat je even in de MSDN kijkt bv welke method je moet aanroepen als je dat niet weet.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.