Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 08:50 Der er 34 kommentarer og
1 løsning

SQL update

Jeg kan ikke få mit program til og lave en update på databasen. Den compiler fint, men det er noget med den SQL sætning der er noget galt med.

Her er koden

Command.CommandText = "UPDATE bruger SET First_Name = '?fornavn', Last_Name = '?efternavn', Adresse = '?adresse', Postnr = '?postnr', City = '?by', Birth = '?fødselsdato', Stilling = '?stilling', Tlf = '?tlf', Mobil = '?mobil', Email = '?email' WHERE id ='" + tmpbruger_id + "'";
           
            Command.Prepare();

            Command.Parameters.Add("?fornavn", "" + this.txtBox_Rediger_Fornavn.Text + "");
            Command.Parameters.Add("?efternavn", "" + this.txtBox_Rediger_Efternavn.Text + "");
            Command.Parameters.Add("?adresse", "" + this.txtBox_Rediger_Adresse.Text + "");
            Command.Parameters.Add("?postnr", "" + this.txtBox_Rediger_Postnr.Text + "");
            Command.Parameters.Add("?by", "" + this.txtBox_Rediger_By.Text + "");
            Command.Parameters.Add("?fødselsdato", "" + this.txtBox_Rediger_Fødselsdag.Text + "");
            Command.Parameters.Add("?stilling", "" + this.txtBox_Rediger_Stilling.Text + "");
            Command.Parameters.Add("?tlf", "" + this.txtBox_Rediger_Tlf.Text + "");
            Command.Parameters.Add("?mobil", "" + this.txtBox_Rediger_Mobil.Text + "");
            Command.Parameters.Add("?email", "" + this.txtBox_Rediger_Email.Text + "");


            Command.ExecuteNonQuery();
Avatar billede dr_chaos Nybegynder
16. november 2005 - 09:01 #1
skal du ikke bruge @ istedet for ?
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 09:04 #2
Altså @fornavn i stedet for ?fornavn eller hva mener du?
Avatar billede dr_chaos Nybegynder
16. november 2005 - 09:05 #3
ja @fornavn i stedet for ?fornavn
normalt angiver jeg parametre med @
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 09:14 #4
Det hjælper ikke og bruge @. Jeg bruger også ?fornavn når jeg opretter brugere, der virker det fint. Jeg får følgende fejl når jeg prøver og lave update

"The connection property has not been set."
Avatar billede the_party_dog Nybegynder
16. november 2005 - 09:30 #5
Skal du ikke åbne din forbindelse? Har du sat en connection til dit Command object?
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 09:52 #6
#22003Out of range value adjusted for column 'Postnr' at row 1

Får jeg af fejl nu

Her er hele koden, hvor det opretter forbindelse osv

string MyConnection = "server=127.0.0.1;uid=root;" +
                "pwd=kommet;database=brugere;";
           
            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Connect;
            MySql.Data.MySqlClient.MySqlCommand Command;

            Connect = new MySql.Data.MySqlClient.MySqlConnection();
            Command = new MySql.Data.MySqlClient.MySqlCommand();

            Connect.ConnectionString = MyConnection;


            Connect.Open();//Åbner forbindelse til databasen
            Command.Connection = Connect;

            Command.CommandText = "UPDATE bruger SET First_Name = '@fornavn', Last_Name = '@efternavn', Adresse = '@adresse', Postnr = '@postnr', City = '@by', Birth = '@fødselsdato', Stilling = '@stilling', Tlf = '@tlf', Mobil = '@mobil', Email = '@email' WHERE id ='" + tmpbruger_id + "'";
           
            Command.Prepare();

            Command.Parameters.Add("@fornavn", "" + this.txtBox_Rediger_Fornavn.Text + "");
            Command.Parameters.Add("@efternavn", "" + this.txtBox_Rediger_Efternavn.Text + "");
            Command.Parameters.Add("@adresse", "" + this.txtBox_Rediger_Adresse.Text + "");
            Command.Parameters.Add("@postnr", "" + this.txtBox_Rediger_Postnr.Text + "");
            Command.Parameters.Add("@by", "" + this.txtBox_Rediger_By.Text + "");
            Command.Parameters.Add("@fødselsdato", "" + this.txtBox_Rediger_Fødselsdag.Text + "");
            Command.Parameters.Add("@stilling", "" + this.txtBox_Rediger_Stilling.Text + "");
            Command.Parameters.Add("@tlf", "" + this.txtBox_Rediger_Tlf.Text + "");
            Command.Parameters.Add("@mobil", "" + this.txtBox_Rediger_Mobil.Text + "");
            Command.Parameters.Add("@email", "" + this.txtBox_Rediger_Email.Text + "");


            Command.ExecuteNonQuery();
            Connect.Close();
Avatar billede dr_chaos Nybegynder
16. november 2005 - 09:55 #7
er post nummer feltet en varchar eller en int ?
Avatar billede the_party_dog Nybegynder
16. november 2005 - 09:57 #8
Alex: Havde du glemt connection? Eller hvad fik din fejl til at gå væk?
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 10:06 #9
Det er en int. Jeg havde sat // foran en af de gange hvor jeg compilede derfor fik jeg den fejl
Avatar billede dr_chaos Nybegynder
16. november 2005 - 10:16 #10
prøv lige at copy paste hele koden herind
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 10:18 #11
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace LoginSystem
{
    public partial class Rediger_Bruger : Form
    {
        private int tmpbruger_id;
        public Rediger_Bruger(int Bruger_ID)
        {
            tmpbruger_id = Bruger_ID;
            InitializeComponent();
        }
        private void Rediger_Bruger_Load(object sender, EventArgs e)
        {
            Find_db();
            this.Text = "Rediger Bruger (" + this.txtBox_Rediger_Fornavn.Text + " " + this.txtBox_Rediger_Efternavn.Text + ")";
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Close();
        }
        public void Find_db()
        {
            string MyConnection = "server=127.0.0.1;uid=root;" +
                "pwd=kommet;database=brugere;";

            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Connect;
            Connect = new MySql.Data.MySqlClient.MySqlConnection();
            Connect.ConnectionString = MyConnection;

            Connect.Open();//Åbner forbindelse til databasen
            MySql.Data.MySqlClient.MySqlCommand Command = new MySql.Data.MySqlClient.MySqlCommand("SELECT * FROM bruger WHERE id ='" + tmpbruger_id + "'", Connect);
            MySql.Data.MySqlClient.MySqlDataReader rdr_find = Command.ExecuteReader();
            while (rdr_find.Read())
            {
                this.txtBox_ID.Text = "" + (int)rdr_find[0] + "";
                this.txtBox_Rediger_Fornavn.Text = "" + (string)rdr_find[1] + "";
                this.txtBox_Rediger_Efternavn.Text = "" + (string)rdr_find[2] + "";
                this.txtBox_Rediger_Adresse.Text = "" + (string)rdr_find[3] + "";
                this.txtBox_Rediger_Postnr.Text = "" + (int)rdr_find[4] + "";
                this.txtBox_Rediger_By.Text = "" + (string)rdr_find[5] + "";
                this.txtBox_Rediger_Fødselsdag.Text = "" + (int)rdr_find[6] + "";
                this.txtBox_Rediger_Stilling.Text = "" + (string)rdr_find[7] + "";
                this.txtBox_Rediger_Tlf.Text = "" + (int)rdr_find[8] + "";
                this.txtBox_Rediger_Mobil.Text = "" + (int)rdr_find[9] + "";
                this.txtBox_Rediger_Email.Text = "" + (string)rdr_find[10] + "";
            }
            rdr_find.Close();
            Connect.Close();
        }
        public void Write_db()
        {
            string MyConnection = "server=127.0.0.1;uid=root;" +
                "pwd=kommet;database=brugere;";
           
            //Laver Forbindelse til databasen
            MySql.Data.MySqlClient.MySqlConnection Connect;
            MySql.Data.MySqlClient.MySqlCommand Command;

            Connect = new MySql.Data.MySqlClient.MySqlConnection();
            Command = new MySql.Data.MySqlClient.MySqlCommand();

            Connect.ConnectionString = MyConnection;


            Connect.Open();//Åbner forbindelse til databasen
            Command.Connection = Connect;

            Command.CommandText = "UPDATE bruger SET First_Name = '@fornavn', Last_Name = '@efternavn', Adresse = '@adresse', Postnr = '@postnr', City = '@by', Birth = '@fødselsdato', Stilling = '@stilling', Tlf = '@tlf', Mobil = '@mobil', Email = '@email' WHERE id ='" + tmpbruger_id + "'";
           
            Command.Prepare();

            Command.Parameters.Add("@fornavn", "" + this.txtBox_Rediger_Fornavn.Text + "");
            Command.Parameters.Add("@efternavn", "" + this.txtBox_Rediger_Efternavn.Text + "");
            Command.Parameters.Add("@adresse", "" + this.txtBox_Rediger_Adresse.Text + "");
            Command.Parameters.Add("@postnr", "" + this.txtBox_Rediger_Postnr.Text + "");
            Command.Parameters.Add("@by", "" + this.txtBox_Rediger_By.Text + "");
            Command.Parameters.Add("@fødselsdato", "" + this.txtBox_Rediger_Fødselsdag.Text + "");
            Command.Parameters.Add("@stilling", "" + this.txtBox_Rediger_Stilling.Text + "");
            Command.Parameters.Add("@tlf", "" + this.txtBox_Rediger_Tlf.Text + "");
            Command.Parameters.Add("@mobil", "" + this.txtBox_Rediger_Mobil.Text + "");
            Command.Parameters.Add("@email", "" + this.txtBox_Rediger_Email.Text + "");


            Command.ExecuteNonQuery();
            Connect.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Write_db();
        }
    }
}
Avatar billede dr_chaos Nybegynder
16. november 2005 - 10:29 #12
du må kunne angive en type på  Command.Parameters.Add("@postnr", "" + this.txtBox_Rediger_Postnr.Text + "");
lige nu forsøger du at sende en varchar ned i et int felt.
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 10:40 #13
Det virker fint når jeg opretter en bruger. Altså med SELECT, så er den ligeglad med jeg tager den direkte fra tekst strengen

Jeg får stadig den her fejl

#22003Out of range value adjusted for column 'Postnr' at row 1

Og nu ser det jeg har ændret sådan her ud

int postnr = int.Parse(this.txtBox_Rediger_Postnr.Text);
            int fødsel = int.Parse(this.txtBox_Rediger_Fødselsdag.Text);
            int tlf = int.Parse(this.txtBox_Rediger_Tlf.Text);
            int mobil = int.Parse(this.txtBox_Rediger_Mobil.Text);
           
            Command.Parameters.Add("@fornavn", "" + this.txtBox_Rediger_Fornavn.Text + "");
            Command.Parameters.Add("@efternavn", "" + this.txtBox_Rediger_Efternavn.Text + "");
            Command.Parameters.Add("@adresse", "" + this.txtBox_Rediger_Adresse.Text + "");
            Command.Parameters.Add("@postnr", "" + postnr + "");
            Command.Parameters.Add("@by", "" + this.txtBox_Rediger_By.Text + "");
            Command.Parameters.Add("@fødselsdato", "" + fødsel + "");
            Command.Parameters.Add("@stilling", "" + this.txtBox_Rediger_Stilling.Text + "");
            Command.Parameters.Add("@tlf", "" + tlf + "");
            Command.Parameters.Add("@mobil", "" + mobil + "");
            Command.Parameters.Add("@email", "" + this.txtBox_Rediger_Email.Text + "");
Avatar billede arne_v Ekspert
16. november 2005 - 12:35 #14
hvad med

Command.Parameters.Add("@postnr", postnr);

?
Avatar billede arne_v Ekspert
16. november 2005 - 12:35 #15
iøvrigt vil jeg klar anbefale at definere database typen for de parameters
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 12:51 #16
Jeg får stadig samme fejl Arne...

Definere database typen???
Avatar billede arne_v Ekspert
16. november 2005 - 13:00 #17
som i:

        MySqlCommand ins = new MySqlCommand("INSERT INTO temptest VALUES (?id)", con);
        ins.Parameters.Add("?id", MySqlDbType.VarChar, 20);
        ins.Parameters["?id"].Value = "Dette er en test";
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 13:18 #18
Okay. Der er ikke nogen forskel på om man bruger ?id eller @id som parameter
Avatar billede arne_v Ekspert
16. november 2005 - 13:42 #19
til nyeste versioner af MySQL connectoren bruger jeg altid "?"

men min pointe var at man definerede typen på parameteren
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 14:15 #20
Jeg har også definered typen nu. Jeg kan også godt se det er en god ide, det giver et bedre overblik. Har du en ide til hvorfor jeg får den fejl?

#22003Out of range value adjusted for column 'Postnr' at row 1
Avatar billede arne_v Ekspert
16. november 2005 - 14:17 #21
mit gæt var egentligt at det var et type problem'

er feltet erklæret som INT i databasen ?
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 14:26 #22
Her er noget kode, hvor jeg opretter en ny bruger, det fungerer fint.

MySql.Data.MySqlClient.MySqlConnection Connect;
            MySql.Data.MySqlClient.MySqlCommand Command;

            Connect            = new MySql.Data.MySqlClient.MySqlConnection();
            Command            = new MySql.Data.MySqlClient.MySqlCommand();

            Connect.ConnectionString = MyConnection;
            try
            {
                Connect.Open();//Åbner forbindelse til databasen
                Command.Connection = Connect;

                Command.CommandText = "INSERT INTO bruger" +
                    "(First_Name, Last_Name, Adresse, Postnr, City, Birth, Stilling, Tlf, Mobil, Email) VALUES" +
                    "(?fornavn, ?efternavn, ?adresse, ?postnr, ?by, ?fødselsdato, ?stilling, ?tlf, ?mobil, ?email)";
                Command.Prepare();

               
               
                int postnr = int.Parse(this.txtBox_Postnr.Text);
                int fødsel = int.Parse(this.txtBox_Fødselsdag.Text);
                int tlf = int.Parse(this.txtBox_Tlf.Text);
                int mobil = int.Parse(this.txtBox_Mobil.Text);
               
                Command.Parameters.Add("?fornavn", "" + this.txtBox_Fornavn.Text + "");
                Command.Parameters.Add("?efternavn", "" + this.txtBox_Efternavn.Text + "");
                Command.Parameters.Add("?adresse", "" + this.txtBox_Adresse.Text + "");
                Command.Parameters.Add("?postnr", "" + postnr + "");
                Command.Parameters.Add("?by", "" + this.txtBox_By.Text + "");
                Command.Parameters.Add("?fødselsdato", "" + fødsel + "");
                Command.Parameters.Add("?stilling", "" + this.txtBox_Stilling.Text + "");
                Command.Parameters.Add("?tlf",        "" + tlf + "");
                Command.Parameters.Add("?mobil",    "" + mobil + "");
                Command.Parameters.Add("?email",    "" + this.txtBox_Email.Text + "");


                Command.ExecuteNonQuery();//Sender nye bruger data til databasen
                Connect.Close();//Lukker forbindelsen til databasen

catch har jeg ikke lige taget med. Her skriver den fint i databasen. Det jeg prøver med den her kode, er egentlig bare og skulle opdatere en brugers oplysninger
Avatar billede arne_v Ekspert
16. november 2005 - 14:28 #23
hov

der skal ikke '' omkring parametre
Avatar billede arne_v Ekspert
16. november 2005 - 14:29 #24
Command.CommandText = "UPDATE bruger SET First_Name = '?fornavn', Last_Name = '?efternavn', Adresse = '?adresse', Postnr = '?postnr', City = '?by', Birth = '?fødselsdato', Stilling = '?stilling', Tlf = '?tlf', Mobil = '?mobil', Email = '?email' WHERE id ='" + tmpbruger_id + "'";

'?postnr' skal kun være ?postnr
Avatar billede arne_v Ekspert
16. november 2005 - 14:29 #25
side spørgsmål: hvorfor bruger du ikke parameter på WHERE betingelsen ?
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 14:30 #26
Ja den er erklæret som int(4).
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 14:33 #27
Jamen det virker fint når jeg opretter en bruger, altså at have "?fornavn". Jeg skal self. også have sat parameter på WHERE
Avatar billede arne_v Ekspert
16. november 2005 - 14:35 #28
i din INSERT som virker har du ikke '' omkrint (bare ?xxxx)

i din UPDATE som ikke virker har du '' omkrint ('?xxxx')
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 14:46 #29
Nu har jeg smidt den op sådan her

Command.CommandText = "UPDATE bruger SET First_Name = (@fornavn), Last_Name = (@efternavn), Adresse = (@adresse), Postnr = (@postnr), City = (@by), Birth = (@fødselsdato), Stilling = (@stilling), Tlf = (@tlf), Mobil = (@mobil), Email = (@email) WHERE id ='" + tmpbruger_id + "'";

Nu crasher den da ikke. Nu sletter den bare alt der står i den række man prøver og opdatere
Avatar billede arne_v Ekspert
16. november 2005 - 14:53 #30
fjern lige de unødvendige parenteser

bruger du også @ når du sætter værdierne nu ?
Avatar billede arne_v Ekspert
16. november 2005 - 14:54 #31
eller bedre - skift tilbage til ?
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 15:21 #32
Nu virker det med

Command.CommandText = "UPDATE bruger SET First_Name = ?fornavn, Last_Name = ?efternavn, Adresse = ?adresse, Postnr = ?postnr, City = ?by, Birth = ?fødselsdato, Stilling = ?stilling, Tlf = ?tlf, Mobil = ?mobil, Email = ?email WHERE id ='" + tmpbruger_id + "'";

Så skal jeg bare lige have sat parameter på WHERE også.

Dr chaos tag du de 15 point, fordi du var så flink og hjælpe i starten

Så opretter jeg lige et nyt spørgsmål til dig arne, så kan du få point

Jeg takker mange gange:)
Avatar billede dr_chaos Nybegynder
16. november 2005 - 15:24 #33
ok np selv om jeg ikke kunne hjælpe så meget :)
Avatar billede alex_sleiborg Nybegynder
16. november 2005 - 15:26 #34
Synes nu det er rart folk bare prøver på og hjælpe, en der ikke dygtigt endnu
Avatar billede dr_chaos Nybegynder
16. november 2005 - 15:35 #35
vi har storset alle brug for hjælp en gang i mellem.
Undtagen Arne_v :)
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