2009-12-29 3 views
1

J'ai une base de données SQL Server CE simple, en essayant de mettre à jour une ligne dans une table. La commande suivante fonctionne:SQL Server CE Problèmes de clause Where

UPDATE ConsoleUsage 
SET TotalCircuits = 123 

Mais les mises à jour de commande ci-dessus toutes les lignes, donc ce que je veux est la suivante:

UPDATE ConsoleUsage 
SET TotalCircuits = 123 
WHERE Index = 912 

L'intention est de mettre à jour une seule ligne dans le tableau. Mais cette commande échoue, ce qui donne le message d'erreur cryptique (ici en utilisant le format proposé MS):

Code d'erreur: 80040e37
Message: [UPDATE ConsoleUsage SET TotalCircuits = 123 où l'indice = 912]
Err mineur. : 0
Source: Fournisseur de données ADO.NET SQL Server 2005 Mobile Edition
Err. Par. : Mise à jour ConsoleUsage SET TotalCircuits = 123 = où l'indice 912

La colonne « Index » est un index à la table, j'ai vérifié tous l'orthographe et j'ai essayé cette fois avec et sans cmd.CommandType = CommandType .TableDirect; et cmd.IndexName = "MainIndex";

Qu'est-ce qui me manque?

+0

Mise à jour:. Essayé d'utiliser un autre champ dans la clause WHERE, cela a fonctionné. Il y a donc quelque chose qui ne va pas dans ma colonne "Index", que ce soit son nom ou son type - c'est une "clé primaire" (mais cela devrait-il être important?), Tapez smallint. – toml

+0

Changez le nom "Index" en quelque chose d'autre ("Id" par exemple) et essayez. Est-ce le travail? – Sasha

+0

J'ai ajouté une nouvelle colonne, nommée DateCode, les mêmes données que l'index mais pas une clé primaire, cela fonctionne maintenant. Je vais laisser Index en place puisque toutes les tables (je pense) doivent avoir une clé primaire. Pas inquiet pour un peu d'espace gaspillé, cette table n'a pas beaucoup de rangées. – toml

Répondre

1

Je pense que "Index" est un mot réservé. Essayez l'entoure avec des crochets:

UPDATE ConsoleUsage SET TotalCircuits = 123 WHERE [Index] = 912 
+0

Essayé que, même résultat – toml

1

Sans connaître la structure de la table (pourriez-vous postez le script de création de la table?), Voici quelques choses que je voudrais essayer:

mis entre crochets ([]) autour de toutes les colonnes et le nom de la table pour les échapper, juste au cas mettre le nom de schéma de la table à la table, dbo. [ConsoleUsage] au lieu de [ConsoleUsage] vérifier pour voir si [Index] est un champ char ou non , utilisez '912' au lieu de 912 si c'est

Essayez de convertir un peu: MISE A JOUR T SET TotalCircuits = 123 DE dbo [ConsoleUsage] T OÙ T. [Index] = 912

+0

Essayé tout cela, le même résultat. – toml

+0

Pourriez-vous poster le script de création pour la table? – Sasha

+0

Vous ne savez pas où trouver le "script de création", j'ai créé la table dans designer (using studio '05), et je copie les méthodes get/set individuelles et la méthode Add du fichier dataset.Designer.cs (qui est créé par studio à partir d'un fichier .xsd que je peupler en faisant glisser des tables à partir de l'explorateur de serveur) dans mon code. – toml