2011-09-15 3 views
0

J'utilise le code suivant et il donne l'exception de commande Insert invalide.Insérer une requête pour ms-access avec un objet Oledb ne recevant pas une requête valide

ligne l'objet DataRow à ajouter à la base de données, conn est l'objet OleDBConnection.

OleDbCommand cmd = new OleDbCommand(); 
cmd.Connection = conn; 
cmd.CommandText = `"Insert Into Appointments(ID,Body,End,Location,Start,Subject,Properties)" 
               + "Values(@ID,@Body,@End,@Location,@Start,@Subject,@Properties)"; 


cmd.Parameters.Add("@ID", OleDbType.WChar).Value = row[0].ToString(); 
cmd.Parameters.Add("@Body", OleDbType.WChar).Value = row[1].ToString(); 
cmd.Parameters.Add("@End", OleDbType.Date).Value = Convert.ToDateTime(row[2]).Date.ToLongDateString(); 
cmd.Parameters.Add("@Location", OleDbType.WChar).Value = row[3].ToString(); 
cmd.Parameters.Add("@Start", OleDbType.Date).Value = Convert.ToDateTime(row[4]).Date.ToLongDateString(); 
cmd.Parameters.Add("@Subject", OleDbType.WChar).Value = row[5].ToString(); 
cmd.Parameters.Add("@Properties", OleDbType.WChar).Value = row[6].ToString(); 


       conn.Open();      
       cmd.ExecuteNonQuery();   //At this line exception is generating 
       conn.Close(); 

Aidez-moi s'il vous plaît.

+0

Poster le message d'erreur complète –

+0

{ « Erreur de syntaxe dans l'instruction INSERT INTO. »} – VIKRAM

Répondre

3

Vous en avez un (éventuellement plus) reserved word dans les noms des champs de votre tableau.

Le nom du champ Fin ... à tout le moins.

Essayez

cmd.CommandText = `"Insert Into Appointments(ID,Body,[End],Location,Start,Subject,Properties)" 
               + "Values(@ID,@Body,@End,@Location,@Start,@Subject,@Properties)"; 
+0

Merci ......... il est en cours d'exécution. – VIKRAM

0

La table "Appointments" prend-elle en charge l'insertion d'ID? Si la colonne ID est la valeur d'identité, cela peut causer des problèmes.

+0

ID est une clé primaire et il est de type texte, mais il pourrait ne pas créer des problèmes car il est de un ensemble de données avec le même schéma que la base de données. – VIKRAM

0

Je pense que les types de données que vous utilisez pour vos paramètres sont incorrects.

Si votre colonne ID est une colonne numérique, vous ne devriez pas utiliser OleDbType.WChar, mais OleDbType.Integer, par exemple

Pour alfanumeric colonnes, je ne voudrais pas utiliser OleDbType.WChar non plus, mais OleDbtype.VarChar. Voir également l'énumération OleDbType.

+0

L'ID de colonne est de type Texte – VIKRAM

+0

OleDbType.VarChar donne toujours la même erreur – VIKRAM

Questions connexes