Avatar billede agertoft Nybegynder
01. februar 2005 - 02:36 Der er 11 kommentarer og
1 løsning

Fejl ved indsættelse af post i tabel i Access

Nedenstående metode indsætter en post i min access-database. Men jeg får fejlen:

Exception Details: System.Data.OleDb.OleDbException: Syntax error in INSERT INTO statement.

og jeg har nok stirret mig blind på det her. Er der en som kan se, hvor jeg har min fejl henne? Den fejler når den vil insætte posten i ExecuteNonQuery.

public void insert(string match, DateTime date, string report, string result, string author)
{
  System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
 
  conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + HttpContext.Current.Server.MapPath("mindb.mdb") + ";";
           
  string sql = "INSERT INTO reports (match, result, date, report, author) VALUES (@match, @result, @date, @report, @author)";

  OleDbCommand cmd = new OleDbCommand (sql, conn);
           
  cmd.Parameters.Add("@match", OleDbType.VarChar);
  cmd.Parameters.Add("@result", OleDbType.VarChar);
  cmd.Parameters.Add("@date", OleDbType.DBDate);
  cmd.Parameters.Add("@report", OleDbType.VarChar);
  cmd.Parameters.Add("@author", OleDbType.VarChar);

  cmd.Parameters["@match"].Value = match;
  cmd.Parameters["@result"].Value = result;
  cmd.Parameters["@date"].Value = date;
  cmd.Parameters["@report"].Value = report;
  cmd.Parameters["@author"].Value = author;
           
  conn.Open();
  cmd.ExecuteNonQuery();
  conn.Close();
}
Avatar billede agertoft Nybegynder
01. februar 2005 - 02:41 #1
Tabellen "reports" som jeg prøver at indsætte i har følgende rækker:

id = autonumber
match = text
result = text
date = date/time
report = memo
author = text
Avatar billede arne_v Ekspert
01. februar 2005 - 07:46 #2
Jeg tror at det er et reserveret ord problem.
Avatar billede arne_v Ekspert
01. februar 2005 - 07:47 #3
Prøv:

string sql = "INSERT INTO reports (match, result, [date], report, author) VALUES (@match, @result, @date, @report, @author)";
Avatar billede arne_v Ekspert
01. februar 2005 - 07:48 #4
Og ændre OleDType på report
Avatar billede arne_v Ekspert
01. februar 2005 - 07:49 #5
cmd.Parameters.Add("@report", OleDbType.LongVarChar);
Avatar billede agertoft Nybegynder
01. februar 2005 - 13:58 #6
Nu ser metoden således ud, men det har desværre ikke hjulpet :(

public void insert(string match, DateTime date, string report, string result, string author)
{
  System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
  conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source="         + HttpContext.Current.Server.MapPath("pointdb2005.mdb") + ";";
           
  string sql = "INSERT INTO reports (match, result, [date], report, author) VALUES (@match, @result, @date, @report, @author)";

  OleDbCommand cmd = new OleDbCommand (sql, conn);
           
  cmd.Parameters.Add("@match", OleDbType.VarChar);
  cmd.Parameters.Add("@result", OleDbType.VarChar);
  cmd.Parameters.Add("@date", OleDbType.Date);
  cmd.Parameters.Add("@report", OleDbType.LongVarChar);
  cmd.Parameters.Add("@author", OleDbType.VarChar);

  cmd.Parameters["@match"].Value = match;
  cmd.Parameters["@result"].Value = result;
  cmd.Parameters["@date"].Value = date;
  cmd.Parameters["@report"].Value = report;
  cmd.Parameters["@author"].Value = author;
           
  conn.Open();
  cmd.ExecuteNonQuery();
  conn.Close();
}
Avatar billede agertoft Nybegynder
01. februar 2005 - 13:59 #7
Jeg får stadig samme fejl...
Avatar billede agertoft Nybegynder
01. februar 2005 - 14:44 #8
SQL sætningen kommer til at se sådan ud:

"INSERT INTO reports (match, result, [date], report, author) VALUES (@match, @result, @date, @report, @author)"

Jeg kan virkelig ikke se, hvad der skulle være galt med den...
Avatar billede agertoft Nybegynder
01. februar 2005 - 15:39 #9
Hvis jeg istedet indsætter en post i en ny tabel "personer" med rækkerne "fornavn" og "efternavn", som begge er af typen VarChar, så virker det fint:

public void insert(string match, DateTime date, string report, string result, string author)
{
  System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
 
  conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source="
+ HttpContext.Current.Server.MapPath("pointdb2005.mdb") + ";";       
 
  string sql = "INSERT INTO personer (fornavn, efternavn) VALUES (@match, @result)";

  OleDbCommand cmd = new OleDbCommand (sql, conn);
           
  cmd.Parameters.Add("@match", OleDbType.VarChar);
  cmd.Parameters.Add("@result", OleDbType.VarChar);

  cmd.Parameters["@match"].Value = match;
  cmd.Parameters["@result"].Value = result;
           
  conn.Open();
  cmd.ExecuteNonQuery();
  conn.Close();
}

Ovenstående virker helt fint, men jeg kan ikke se, hvad forskellen på det der og det andet skulle være...?
Avatar billede arne_v Ekspert
01. februar 2005 - 15:51 #10
Reserveret ord eller data type.

Hvad hvis du omdøber det felt der hedder date
Avatar billede agertoft Nybegynder
01. februar 2005 - 16:05 #11
Ja det har været et reserveret ord - det var bare ikke date. Nu kaldte jeg alle rækker med et "1"-tal bagefter og nu virker det fint...

Læg et svar :)
Avatar billede arne_v Ekspert
01. februar 2005 - 16:08 #12
ok
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