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();
Annonceindlæg fra Barco
16. november 2005 - 09:01
#1
skal du ikke bruge @ istedet for ?
16. november 2005 - 09:04
#2
Altså @fornavn i stedet for ?fornavn eller hva mener du?
16. november 2005 - 09:05
#3
ja @fornavn i stedet for ?fornavn normalt angiver jeg parametre med @
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."
16. november 2005 - 09:30
#5
Skal du ikke åbne din forbindelse? Har du sat en connection til dit Command object?
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();
16. november 2005 - 09:55
#7
er post nummer feltet en varchar eller en int ?
16. november 2005 - 09:57
#8
Alex: Havde du glemt connection? Eller hvad fik din fejl til at gå væk?
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
16. november 2005 - 10:16
#10
prøv lige at copy paste hele koden herind
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(); } } }
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.
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 + "");
16. november 2005 - 12:35
#14
hvad med Command.Parameters.Add("@postnr", postnr); ?
16. november 2005 - 12:35
#15
iøvrigt vil jeg klar anbefale at definere database typen for de parameters
16. november 2005 - 12:51
#16
Jeg får stadig samme fejl Arne... Definere database typen???
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";
16. november 2005 - 13:18
#18
Okay. Der er ikke nogen forskel på om man bruger ?id eller @id som parameter
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
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
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 ?
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
16. november 2005 - 14:28
#23
hov der skal ikke '' omkring parametre
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
16. november 2005 - 14:29
#25
side spørgsmål: hvorfor bruger du ikke parameter på WHERE betingelsen ?
16. november 2005 - 14:30
#26
Ja den er erklæret som int(4).
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
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')
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
16. november 2005 - 14:53
#30
fjern lige de unødvendige parenteser bruger du også @ når du sætter værdierne nu ?
16. november 2005 - 14:54
#31
eller bedre - skift tilbage til ?
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:)
16. november 2005 - 15:24
#33
ok np selv om jeg ikke kunne hjælpe så meget :)
16. november 2005 - 15:26
#34
Synes nu det er rart folk bare prøver på og hjælpe, en der ikke dygtigt endnu
16. november 2005 - 15:35
#35
vi har storset alle brug for hjælp en gang i mellem. Undtagen Arne_v :)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.