05. juli 2006 - 19:47
Der er
30 kommentarer og 1 løsning
Syntax fejl i update statement
Hej Jeg får en sytax error in update statement, men kan ikke se, hvor jeg har en fejl. Kan én af jer? OleDbConnection minCon = new OleDbConnection(); minCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\ANSI\\fakturasystem.mdb"; OleDbCommand minCommand = new OleDbCommand("UPDATE Firmanavn = @Firmanavn" + "WHERE FirmaID = @FirmaID", minCon); minCommand.Parameters.Add(new OleDbParameter("@FirmaID", OleDbType.Integer, 5, firmaIDTextBox1.Text)); minCommand.Parameters.Add(new OleDbParameter("@Firmanavn", txtFirmanavn.Text)); minCon.Open(); try { minCommand.ExecuteNonQuery(); } catch (OleDbException ex) { MessageBox.Show("OleDbException" + ex); } catch (Exception ex) { MessageBox.Show("Exception" + ex); } finally { minCon.Close(); } mvh simsen :-)
Annonceindlæg tema
syntaxen for UPDATE er: UPDATE tabelnavn SET feltnavn = @xxx WHERE andetfeltnavn = @yyy der mangler noget i din SQL
Syntaxen er vist "UPDATE tabelnavn SET Firmanavn = @Firmanavn WHERE FirmaID = @FirmaID"
I har selvfølgelig ret........ jeg har været SÅ fokuseret på de parametre (som er første gang jeg for mig selv prøver dem), jeg har glemt alt andet.... Nu får jeg dog en anden fejl i samme sætning; @Firmanavn has no default value Kan I fortælle mig hvad og hvordan og hvorledes? mvh simsen
du mangler minCommand.Parameters["@firmanavn"].Value = "en vaerdi";
du kan selvfoelgelig ogsaa tilfoeje vaerdien i din Add ligesom du goer for den anden parameter
Ok - var ikke klar over, at når værdien er text, der skulle en med. minCommand.Parameters.Add(new OleDbParameter("@Firmanavn", OleDbType.Char, 255, txtFirmanavn.Text)); Nu forsøger jeg at sætte en værdi ind, men jeg får samme fejl? Det er en type Tekst i databasen, og den nærmeste jeg mener at kunne komme er vel char?
umiddelbart lyder OleDbType.LongVarChar mere passende
og jeg tror at du skal satse paa .Value= maaden at goere det paa
Det der skal stå imellem "en vaerdi" er det så eksempelvis txtFirmanavn.Text?
05. juli 2006 - 20:50
#10
minCommand.Parameters["@firmanavn"].Value = txtFirmanavn.Text;
05. juli 2006 - 21:02
#11
Bruger jeg de følgende to linier minCommand.Parameters["@FirmaID"].Value = firmaIDTextBox1.Text; minCommand.Parameters["@Firmanavn"].Value = txtFirmanavn.Text; får jeg følgende fejl: An OleDbParameter with ParameterName '@FirmaID' is not contained by this OleDbParameterCollection? Er det fordi, jeg også skal bruge Add men uden OleDbType?
05. juli 2006 - 21:11
#12
Hmmmmmm - det var det - nu fremkommer den da ikke længere med fejl, men gemmer heller intet i databasen?
05. juli 2006 - 21:13
#13
hvis ikke der er noget osm matcher WHERE betingelsen saa goer den UPDATE jo ingenting (hvis du vil indsaette en ny raekke skal du bruge INSERT)
05. juli 2006 - 21:15
#14
Prøv om det hjælper at indsætte et mellemrum mellem @Firmanavn og WHERE
05. juli 2006 - 21:25
#15
arne Jamen jeg har en FirmaID i databasen der hedder 1 - men det er et autonumerisk felt - har det noget at sige? morhan Jeg har ændret det, så der er mellemrum - det gjorde jeg i første hug, da jeg satte tabel og SET ind
05. juli 2006 - 21:33
#16
det burde vaere OK proev lige at erstatte minCommand.ExecuteNonQuery(); med MessageBox.Show("UPDATE rettede i " + minCommand.ExecuteNonQuery() + " raekker");
05. juli 2006 - 21:39
#17
Den skriver den rettede i 0 rækker. Men jeg er altså sikker på at ID er 1 - jeg selecter dem (ved brug af datagridview) og der ser jeg at FirmaID står med "1"
05. juli 2006 - 21:41
#18
Bruger jeg istedet denne her: OleDbCommand minCommand = new OleDbCommand("UPDATE Firmaoplysninger SET Firmanavn = @Firmanavn" + " WHERE FirmaID = 1", minCon); Så gemmer den i databasen - men som sagt, jeg kan læse mig frem til at FirmaID = 1 - så jeg fatter nada?
05. juli 2006 - 21:44
#19
proev lige med: minCommand.Parameters["@FirmaID"].Value = int.Parse(firmaIDTextBox1.Text);
05. juli 2006 - 21:50
#20
Det hjalp heller ikke - stadig opdatering i 0 rækker Du får lige min kode her, som den ser ud nu: OleDbConnection minCon = new OleDbConnection(); minCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\ANSI\\fakturasystem.mdb"; OleDbCommand minCommand = new OleDbCommand("UPDATE Firmaoplysninger SET Firmanavn = @Firmanavn" + " WHERE FirmaID = @FirmaID", minCon); //OleDbCommand minCommand = new OleDbCommand("UPDATE Firmaoplysninger SET Firmanavn = @Firmanavn" + " WHERE FirmaID = 1", minCon); minCommand.Parameters.Add(new OleDbParameter("@FirmaID", firmaIDTextBox1.Text)); minCommand.Parameters.Add(new OleDbParameter("@Firmanavn", txtFirmanavn.Text)); minCommand.Parameters["@FirmaID"].Value = int.Parse(firmaIDTextBox1.Text); //minCommand.Parameters["@FirmaID"].Value = firmaIDTextBox1.Text; minCommand.Parameters["@Firmanavn"].Value = txtFirmanavn.Text; minCon.Open(); try { MessageBox.Show("UPDATE rettede i " + minCommand.ExecuteNonQuery() + " raekker"); //minCommand.ExecuteNonQuery(); } catch (OleDbException ex) { MessageBox.Show("OleDbException" + ex); } catch (Exception ex) { MessageBox.Show("Exception" + ex); } finally { minCon.Close(); }
05. juli 2006 - 21:59
#21
minCommand.Parameters.Add(new OleDbParameter("@FirmaID", firmaIDTextBox1.Text)); minCommand.Parameters.Add(new OleDbParameter("@Firmanavn", txtFirmanavn.Text)); -> minCommand.Parameters.Add("@FirmaID", OleDbType.Integer); minCommand.Parameters.Add("@Firmanavn", OleDbType.VarChar, 50);
05. juli 2006 - 22:03
#22
Det hjalp heller ikke - stadig 0 rækker
05. juli 2006 - 22:11
#23
Kopierer lige database rækken for dig: FirmaID Firmanavn Adresse Postnr Bynavn CVRNummer Bank BankRegnr Bankkontonummer Telefonnr Mobilnr 1 sadf Firmaadresse 7100 Vejle 11111111 Sydbank 8888 4444444 75999999 20202020 Som du kan se - så ER der altså et FirmaID med 1 :-)
05. juli 2006 - 22:34
#24
Jeg har lige kigget i databasen - den gemmer ikke, det jeg skriver i txtFirmanavn men skriver istedet "1", når jeg gemmer med OleDbCommand minCommand = new OleDbCommand("UPDATE Firmaoplysninger SET Firmanavn = @Firmanavn" + " WHERE FirmaID = 1", minCon); Jeg har altså lige checket i Design - ID står som firmaIDTextBox1 og Firnavn står som txtFirmanavn..... Jeg bliver altså mere og mere rundforvirret :-/
06. juli 2006 - 04:13
#25
prøv lige og hav parameterne i samme rækkefølge som du har dem i SQL sætningen
06. juli 2006 - 04:14
#26
OleDbCommand minCommand = new OleDbCommand("UPDATE Firmaoplysninger SET Firmanavn = @Firmanavn" + " WHERE FirmaID = @FirmaID", minCon); minCommand.Parameters.Add("@Firmanavn", OleDbType.VarChar, 50); minCommand.Parameters.Add("@FirmaID", OleDbType.Integer); minCommand.Parameters["@Firmanavn"].Value = txtFirmanavn.Text; minCommand.Parameters["@FirmaID"].Value = int.Parse(firmaIDTextBox1.Text);
06. juli 2006 - 06:07
#27
Det her virker :-) Men nu vil jeg også gerne lære noget....... Så når du lige smidet et svar, for at få dine velfortjente points, gider du så svare på følgende: Jeg har sammenlignet og sammenlignet og det eneste forskel, jeg kan se, du har gjort, er rækkefølgen af minCommand.Parameters - var det der fejlen var, at de skal stå i samme rækkefølge som hvordan du skriver dem ind i din update statement? Er int.Parse det samme som en convert - hvis ikke - hvad laver den? mvh en meget glad simsen :-)
06. juli 2006 - 06:57
#28
hov så ikke lige din kommentar fra 06/07-2006 04:13:10 - så svaret med rækkefølgen har jo givet sig selv ved det... Så det er kun følgende, jeg mangler at vide: Er int.Parse det samme som en convert - hvis ikke - hvad laver den? Husk at ligge et svar, så du kan få dine points. Og tak for din store tålmodighed, jeg er bestemt én af dem, der værdsætter, at I er nogle "hajer", der gider hjælpe sådan én som mig, der er i fuld gang med at lære og lære :-) mvh simsen :-)
06. juli 2006 - 13:50
#29
int.Parse og Convert.ToInt32 gør det samme fra docs af den sidste: [C#] public static int ToInt32( string value ); Parameters value A String containing a number to convert. Return Value A 32-bit signed integer equivalent to the value of value. -or- Zero if value is a null reference (Nothing in Visual Basic). Remarks The return value is the result of invoking the Int32.Parse method on value.
06. juli 2006 - 13:50
#30
og svar
06. juli 2006 - 13:51
#31
det med rækkefølgen er et problem i nogle ældre drivere (OLE DB og ODBC) SQLServer, Oracle, MySQL .NET providere har ikke det problem
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.