Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Syntaxfehler in der INSERT INTO-Anweisung


nicolon - Fr 18.10.13 18:41
Titel: Syntaxfehler in der INSERT INTO-Anweisung
Guten Tag,
ich bin schon seit Tagen am verzweifeln. Ganz einfacher Code und bestimmt ganz einfaches Problem:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
            OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data.mdb");
            con.Open();

            string strSQL = "INSERT INTO tbl_user (ID, User, Online) VALUES (3, '"+ data +"', 'NEIN')";

            OleDbCommand cmd = new OleDbCommand(strSQL, con);
            OleDbDataReader dr = cmd.ExecuteReader();  // Hier wird eine Exception geworfen bzw. Programm stoppt

            dr.Close();
            con.Close();

data ist ein string. ID ist ein Autowert rest ist TEXT
Ich nutze VS2010
Fehlermeldung des Compilers:

Eine nicht behandelte Ausnahme des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.

Zusätzliche Informationen: Syntaxfehler in der INSERT INTO-Anweisung.

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Fr 18.10.13 19:18

Hallo und :welcome:

der Fehler ist ganz einfach: ExecuteReader ist zum Ausführen einer Query (Select-Anweisung). Du möchtest aber eine sog. "NonQuery" ausführen, d.h. ExecuteNonQuery ist die richtige Methode dafür.


nicolon - So 20.10.13 13:33

Hey,

danke nochmal wegen deiner Antwort. Allerdings fuktioniert es immernoch nicht so ganz. Es wird immernoch bei
test = cmd.ExecuteNonQuery(); eine Exception ausgeworfen.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
int test;
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\Users\Nicolon\data.mdb"); 
con.Open(); 

string strSQL = "INSERT INTO dbo.tbl.user (ID, User, Online) VALUES ('3', 'This is a test', 'NEIN')"

OleDbCommand cmd = new OleDbCommand(strSQL, con); 
test = cmd.ExecuteNonQuery();  //Hier kommt Exception

con.Close();

Es heißt immernoch Syntaxfehler in der INSERT INTO-Anweisung.
Ich hoffe jmd kann mir helfen wäre echt cool.

Gruß
Nicolon

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Greenberet - Mo 21.10.13 13:53

Es ist schon eine Weile her, dass ich mit Access gearbeitet habe, aber ich glaube es braucht ein ';' am Ende


C#-Quelltext
1:
string strSQL = "INSERT INTO tbl_user (ID, User, Online) VALUES ('3', '" + data +"', 'NEIN');";                    


Ralf Jansen - Mo 21.10.13 14:18

Zitat:
dbo.tbl.user


Schema.Datenbank.Tabelle?? Sowas kennt man in Server Datenbanksystemen aber in Access?


baumina - Mo 21.10.13 14:25

Ich glaube eher, dass der Name der Tabelle nicht stimmt, denn einen Tabellennamen mit "." ist sehr komisch.

statt dbo.tbl.user => tbl_user ?

EDIT : Ah, Ralf war schneller :-)