Avatar billede nuzer001 Nybegynder
09. december 2008 - 13:14 Der er 25 kommentarer

C#/SQL Error List

Hej

Håber i kan hjælpe har lige et problem Med en SQL eller tror ikke det er den der er fejl i... får denne fejl...

Har lavet en ???? ???? omkring stedet fejlen er
Syntax error, ':' expected
Hvorfor siger den at der skal være en : når man normalt bruger en ;???

private void Gem_Click(object sender, EventArgs e)
        {
            try
            {
                OdbcConnection conn =new OdbcConnection(myDB);
                conn.Open();
                string insertSQL = "INSERT INTO InfoOmHus (SælgersTlf, SælgersNavn, Adresse, Postnummer, By, Beliggenhed, Udsigt, Kvadratmeter, Etager, AlderPåHus, AfstandSkole, AfstandIndkøb) VALUES ('"+ NavnPåSælger.Text?"','"+ SælgersTlf.Text?"','"+ Adresse.Text?"','"+ Postnummer.Text?"','"+ By.Text?"','"+ Beliggenhed.Text?"','"+ Udsigt.Text?"','"+ Kvadratmeter.Text?"','"+ Etager.Text?"','"+ DagIDag.Text?"','"+ Byggelsesdag.Text?"','"+ AlderpåHus.Text?"','"+ textBox1.Text?"','"+ textBox2.Text?"');"????;????
            }
        }
Avatar billede mireigi Novice
09. december 2008 - 13:32 #1
Prøv at fjerne "?" fra alle variable du sender med. Der er ingen grund til at bruge ".Text?" når du indsætter i en tabel hvor de pågældende felter må være null.
Avatar billede nuzer001 Nybegynder
09. december 2008 - 13:48 #2
Nu brokker den sig over '","' alle stederne de er...
Avatar billede nuzer001 Nybegynder
09. december 2008 - 13:49 #3
og siger at den mangler en masse ;
Avatar billede mireigi Novice
09. december 2008 - 13:58 #4
Ahh, tror jeg har den nu :)

Du mangler "+" efter hver ".Text". Du har sikkert trykket forkert i første omgang og skrevet "?" i stedet for "+".

Jeg vil dog anbefale dig at bruge denne i stedet for:

string insertSQL = string.Format("INSERT INTO InfoOmHus (SælgersTlf, SælgersNavn, Adresse, Postnummer, By, Beliggenhed, Udsigt, Kvadratmeter, Etager, AlderPåHus, AfstandSkole, AfstandIndkøb) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}', '{12}', '{13}');", SælgersTlf.Text, NavnPåSælger.Text, Adresse.Text, Postnummer.Text, By.Text, Beliggenhed.Text, Udsigt.Text, Kvadratmeter.Text, Etager.Text, DagIDag.Text, Byggelsesdag.Text, AlderpåHus.Text, textBox1.Text, textBox2.Text);

Ikke alene er der pænere at se på, du slipper også for at skrive så mange "+".
Avatar billede nuzer001 Nybegynder
09. december 2008 - 14:11 #5
Virkede nu er der en ny fejl den siger Expected catch or finally ved den sidste } hvad er det???
Avatar billede aaberg Nybegynder
09. december 2008 - 14:15 #6
I stedet for at bygge op en sql sætning på denne måde, bør du bruge parametre. Det bliver mere overskueligt, og du slipper for alle denne her slags problemer. Samtiddig får du meget bedre performance, især hvis du skal indsætte meget data.

private void Gem_Click(object sender, EventArgs e)
{
  try
  {
      OdbcConnection conn =new OdbcConnection(myDB);
      OdbcCommand command = conn.CreateCommand();

      command.CommandText = "INSERT INTO InfoOmHus (SælgersTlf, SælgersNavn, Adresse, Postnummer, By, Beliggenhed, Udsigt, Kvadratmeter, Etager, AlderPåHus, AfstandSkole, AfstandIndkøb) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)

      command.Parameters.Add(new OdbcParameter("@sælgerTlfParam", SælgersTlf.Text));
      command.Parameters.Add(new OdbcParameter("@sælgersNavnParam", NavnPåSælger.Text));
      osv....

      conn.Open();
      command.ExecuteNonQuery();
  }
  finally
  {
      conn.Close();
  }
}
Avatar billede mireigi Novice
09. december 2008 - 14:17 #7
Når man har en try{}, skal man også ha' en efterfølgende catch{} eller finally{}.

catch{} er den kode der skal afvikles hvis der bliver fundet en fejl i din try{} kode.
finally{} er den kode der skal afvikles ligegyldigt om der bliver fundet en fejl eller ej.

du kan fx. bruge denne kode:

catch (Exception e)
{
    throw new Exception("Der skete en fejl i SQL-kaldet. Kontrollér din kode.", e);
}
finally
{
    conn.Close();
}
Avatar billede aaberg Nybegynder
09. december 2008 - 14:18 #8
Med hensyn til at bruge try, så bliver du nød til at have en catch eller/og finally blok efter try-blokken. Ellers gør try jo ingenting. Catch lader dig håndtere en eventuelt fejl, finally kører noget kode, uanset om der sker fejl eller ej.
Avatar billede nuzer001 Nybegynder
09. december 2008 - 14:21 #9
Hvorfor siger de nu conn ikke findes det gør den da!!!??
Avatar billede aaberg Nybegynder
09. december 2008 - 14:28 #10
Det er sikkert fordi du din variabel "conn" bliver oprettet inde i try-blokken, men du prøver at bruge den uden for try-blokken. Så er den det man kalder "out of scope".
Avatar billede mireigi Novice
09. december 2008 - 14:29 #11
prøv at flytte "OdbcConnection conn =new OdbcConnection(myDB);" uden for din try{}, så den står ovenover.
Avatar billede aaberg Nybegynder
09. december 2008 - 14:30 #12
Løs det ved at flytte variabel-erklæringen uden for try-blokken.

private void Gem_Click(object sender, EventArgs e)
{
  OdbcConnection connection = new OdbcConnection(myDB);
  try
  {
      .....osv.
Avatar billede aaberg Nybegynder
09. december 2008 - 14:30 #13
Jeg synes jeg bliver ved med at gentage mireigi! :-)
Avatar billede nuzer001 Nybegynder
09. december 2008 - 14:37 #14
der kommer ingen fejl nu men der kommer ikke noget i databasen...
Avatar billede aaberg Nybegynder
09. december 2008 - 14:41 #15
Kan vi se din kode?
Avatar billede nuzer001 Nybegynder
09. december 2008 - 14:45 #16
her er det hele

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Odbc;
using System.IO;

namespace Eksamens_Opgave
{
    public partial class Form1 : Form
    {
        string myDB = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=d:\\Skole\\2. Semester\\EKSAMENS PROJEKT (SUSANNE)\\Database\\BoIVejle.mdb";
        public Form1()
        {
            InitializeComponent();
        }

        private void Hjælp_Click(object sender, EventArgs e)
        {
            HelpDeGuleSider HDGS = new HelpDeGuleSider();
            HDGS.Show();
        }

        private void BeregnAlder_Click(object sender, EventArgs e)
        {
            /*int tal1;
            int tal2;
            int resultat;

            if (!int.Parse(DagIDag, out tal1))
                return;
            if (!int.Parse(Byggelsesdag.Text, out tal2))
                return;
            resultat = tal1 - tal2;
            AlderHus.Text = resultat.ToString();*/
            /*          label1.Text=resultat.ToString();*/
        }

        private void label12_Click(object sender, EventArgs e)
        {

        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.degulesider.dk");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Gem_Click(object sender, EventArgs e)
        {
            OdbcConnection conn = new OdbcConnection(myDB);
            try
            {
                conn.Open();
                string insertSQL = "INSERT INTO InfoOmHus (SælgersTlf, SælgersNavn, Adresse, Postnummer, By, Beliggenhed, Udsigt, Kvadratmeter, Etager, AlderPåHus, AfstandSkole, AfstandIndkøb) VALUES ('" + NavnPåSælger.Text + "','" + SælgersTlf.Text + "','" + Adresse.Text + "','" + Postnummer.Text + "','" + By.Text + "','" + Beliggenhed.Text + "','" + Udsigt.Text + "','" + Kvadratmeter.Text + "','" + Etager.Text + "','" + DagIDag.Text + "','" + Byggelsesdag.Text + "','" + AlderHus.Text + "','" + textBox1.Text + "','" + textBox2.Text + "');";
            }
            /*catch (Exception e)
            {
                throw new Exception("Der skete en fejl i SQL-kaldet. Kontrollér koden.", e);
            }*/
            finally
            {
                conn.Close();
            }
        }
   

        private void AlderHus_TextChanged(object sender, EventArgs e)
        {
            /*int resultat = int.Parse(DagIDag.Text) - int.Parse(Byggelsesdag.Text);
            AlderpåHus.Text = resultat.ToString();*/
        }
    }
}
Avatar billede aaberg Nybegynder
09. december 2008 - 15:15 #17
Det ser ikke ud til at du køre noget sql. Du lægger bare en sql-tekst ind i en string variabel, men du bruger det ikke til noget.

Prøv:

        private void Gem_Click(object sender, EventArgs e)
        {
            OdbcConnection conn = new OdbcConnection(myDB);
            OdbcCommand command = conn.CreateCommand();
            command.CommandText = "INSERT INTO InfoOmHus (SælgersTlf, SælgersNavn, Adresse, Postnummer, By, Beliggenhed, Udsigt, Kvadratmeter, Etager, AlderPåHus, AfstandSkole, AfstandIndkøb) VALUES ('" + NavnPåSælger.Text + "','" + SælgersTlf.Text + "','" + Adresse.Text + "','" + Postnummer.Text + "','" + By.Text + "','" + Beliggenhed.Text + "','" + Udsigt.Text + "','" + Kvadratmeter.Text + "','" + Etager.Text + "','" + DagIDag.Text + "','" + Byggelsesdag.Text + "','" + AlderHus.Text + "','" + textBox1.Text + "','" + textBox2.Text + "');";

            try
            {
                conn.Open();
                command.ExecuteNonQuery();
            }
            finally
            {
                conn.Close();
            }
        }
Avatar billede aaberg Nybegynder
09. december 2008 - 15:16 #18
Og tag at overvej det jeg skrev tidligere med parametre, det kommer til at spare dig for mange problemer.
Avatar billede mireigi Novice
09. december 2008 - 15:37 #19
Så fik du noget fred aaberg_cc :)

Er ikke sådan når to personer skriver uafhængigt af hinanden :)
Avatar billede nuzer001 Nybegynder
09. december 2008 - 16:21 #20
Der opstod denne fejt efter jeg lavede det om..

ERROR [42000][Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl i INSERT INTO-sætningen.
Avatar billede mireigi Novice
09. december 2008 - 20:15 #21
Kan du linke koden du har nu? Vil gøre det nemmere at finde fejlen :)
Avatar billede nuzer001 Nybegynder
09. december 2008 - 21:17 #22
her

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Odbc;
using System.IO;
using System.Data.OleDb;

namespace Eksamens_Opgave
{
    public partial class Velkommen : Form
    {
        string myDB = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=d:\\Skole\\2. Semester\\EKSAMENS PROJEKT (SUSANNE)\\Database\\BoIVejle.mdb";
        public Velkommen()
        {
            InitializeComponent();
        }

        private void Hjælp_Click(object sender, EventArgs e)
        {
            HelpDeGuleSider HDGS = new HelpDeGuleSider();
            HDGS.Show();
        }

        private void BeregnAlder_Click(object sender, EventArgs e)
        {
            /*int tal1;
            int tal2;
            int resultat;

            if (!int.Parse(DagIDag, out tal1))
                return;
            if (!int.Parse(Byggelsesdag.Text, out tal2))
                return;
            resultat = tal1 - tal2;
            AlderHus.Text = resultat.ToString();*/
            /*          label1.Text=resultat.ToString();*/
        }

        private void label12_Click(object sender, EventArgs e)
        {

        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.degulesider.dk");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Gem_Click(object sender, EventArgs e)
        {
            OdbcConnection conn = new OdbcConnection(myDB);
            OdbcCommand command = conn.CreateCommand();
            command.CommandText= "INSERT INTO InfoOmHus (SælgersTlf, SælgersNavn, Adresse, Postnummer, By, Beliggenhed, Udsigt, Kvadratmeter, Etager, AlderPåHus, AfstandSkole, AfstandIndkøb) VALUES ('" + NavnPåSælger.Text + "','" + SælgersTlf.Text + "','" + Adresse.Text + "','" + Postnummer.Text + "','" + By.Text + "','" + Beliggenhed.Text + "','" + Udsigt.Text + "','" + Kvadratmeter.Text + "','" + Etager.Text + "','" + DagIDag.Text + "','" + Byggelsesdag.Text + "','" + AlderHus.Text + "','" + textBox1.Text + "','" + textBox2.Text + "');";
            try
            {
                conn.Open();
                command.ExecuteNonQuery();
            }
         
            finally
            {
                conn.Close();
            }
        }
   

        private void AlderHus_TextChanged(object sender, EventArgs e)
        {
            /*int resultat = int.Parse(DagIDag.Text) - int.Parse(Byggelsesdag.Text);
            AlderpåHus.Text = resultat.ToString();*/
        }

        private void PrintOgAfslut_Click(object sender, EventArgs e)
        {
            VisUdskrift VU = new VisUdskrift();
            VU.Show();
            this.Close();
        }
    }
}
Avatar billede mireigi Novice
09. december 2008 - 22:21 #23
Jeg er ikke 100% sikker, men jeg mener at "By" er et reserveret ord i SQL sammenhænge. Prøv at omdøbe feltet til "Bynavn" i tabellen, og husk at ændre "By" til "Bynavn" i din SQL sætning.
Avatar billede nuzer001 Nybegynder
09. december 2008 - 22:24 #24
det er hvist nok rigtig...
Avatar billede nuzer001 Nybegynder
10. december 2008 - 08:25 #25
da jeg fik rettet fejlen kom der en ny...
Nu siger den at den ikke kan finde min tabel... (tabellen hedder Hus)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Odbc;
using System.IO;
using System.Data.OleDb;

namespace Eksamens_Opgave
{
    public partial class Velkommen : Form
    {
        string myDB = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=d:\\Skole\\2. Semester\\EKSAMENS PROJEKT (SUSANNE)\\Database\\BoIVejle.mdb";
        public Velkommen()
        {
            InitializeComponent();
        }

        private void Hjælp_Click(object sender, EventArgs e)
        {
            HelpDeGuleSider HDGS = new HelpDeGuleSider();
            HDGS.Show();
        }

        private void BeregnAlder_Click(object sender, EventArgs e)
        {
            /*int tal1;
            int tal2;
            int resultat;

            if (!int.Parse(DagIDag, out tal1))
                return;
            if (!int.Parse(Byggelsesdag.Text, out tal2))
                return;
            resultat = tal1 - tal2;
            AlderHus.Text = resultat.ToString();*/
            /*          label1.Text=resultat.ToString();*/
        }

        private void label12_Click(object sender, EventArgs e)
        {

        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.degulesider.dk");
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Gem_Click(object sender, EventArgs e)
        {
            OdbcConnection conn = new OdbcConnection(myDB);
            OdbcCommand command = conn.CreateCommand();
            command.CommandText= "INSERT INTO Hus (SælgersTlf, SælgersNavn, Adresse, Postnummer, Bynavn, Beliggenhed, Udsigt, Kvadratmeter, Etager, AlderPåHus, AfstandSkole, AfstandIndkøb) VALUES ('" + NavnPåSælger.Text + "','" + SælgersTlf.Text + "','" + Adresse.Text + "','" + Postnummer.Text + "','" + By.Text + "','" + Beliggenhed.Text + "','" + Udsigt.Text + "','" + Kvadratmeter.Text + "','" + Etager.Text + "','" + AlderHus.Text + "','" + textBox1.Text + "','" + textBox2.Text + "');";
            try
            {
                conn.Open();
                command.ExecuteNonQuery();
            }
         
            finally
            {
                conn.Close();
            }
        }
   

        private void AlderHus_TextChanged(object sender, EventArgs e)
        {
            /*int resultat = int.Parse(DagIDag.Text) - int.Parse(Byggelsesdag.Text);
            AlderpåHus.Text = resultat.ToString();*/
        }

        private void PrintOgAfslut_Click(object sender, EventArgs e)
        {
            VisUdskrift VU = new VisUdskrift();
            VU.Show();
            this.Close();
        }
    }
}
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