2010-09-11 5 views
3

J'ai parcouru les pages MSDN pour apprendre ADO.Net en utilisant les commandes. Je suis capable de lire en utilisant l'exemple de code affiché ici. Mais quand j'ai essayé d'utiliser le code de modification ci-dessous, l'insertion n'intervient pas. Je ne suis pas capable de comprendre pourquoi. Quelqu'un peut-il me dire ce qui ne va pas avec ce code?ADO.Net - Pourquoi l'insertion ne se passe-t-elle pas?

string connectionString = "A_VALID_CONNECTION_STRING"; 
string commandText = 
"INSERT INTO Contacts (FullName, Mobile) VALUES ('Pierce Brosnan', '1800-007')"; 

SqlConnection connection = new SqlConnection(connectionString);   

try 
{ 
    connection.Open(); 
    SqlCommand command = new SqlCommand(commandText, connection); 
    Console.WriteLine(command.ExecuteNonQuery()); 
    connection.Close(); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

Modifier

  • Aucune exception est levée.

  • L'ExecuteNonQuery() qui est censé retourner le numéro. des lignes affectées renvoie 1.

  • Environnement: Visual C# 2010 Express | SQL Server 2008 Express | Windows 7 Ultimate 32 bits.

Mise à jour

  1. Auparavant, je travaillais avec un fichier MDF présent dans le projet. Il était, je suppose, automatiquement attaché à l'instance du serveur SQL chaque fois que le projet s'exécutait. C'est quand j'ai eu le problème. La chaîne de connexion contenait des informations sur la connexion d'un fichier de base de données. J'ai supprimé le SQL Server 2008 Express installé avec Visual C# 2010 Express. Également supprimé le fichier MDF du projet.

  2. I J'ai téléchargé et installé séparément SQL Server 2008 Express avec Management Studio Express.

  3. Créé une nouvelle base de données dans le studio de gestion.

  4. Utilisé un type différent de chaîne de connexion pour utiliser la base de données dans le serveur.

Maintenant INSERT fonctionne!

P.S. Je suppose que j'aurais dû mentionner que j'avais un scénario de fichier de base de données attach. Vraiment désolé pour ça.

+0

Une exception est-elle levée? –

+0

Non. Aucune exception n'est levée (ou imprimée). La Console.WriteLine imprime '1'. Mais quand je vois la table de base de données, rien n'est inséré. Je regarde les données en utilisant l'explorateur de base de données dans C# 2010 Express IDE. –

+0

C'est vraiment étrange. Votre code a l'air bien et si «1» est imprimé cela signifie qu'une rangée a été insérée. –

Répondre

3

Je soupçonne que vous avez eu le scénario suivant:

  • fichier Database.mdf était présent dans le projet avec la structure de table créée en elle
  • Votre chaîne de connexion regardé quelque chose comme ça Server=.\SQLExpress;AttachDbFilename=database.mdf;Database=dbname; Trusted_Connection=Yes;, à savoir le chargement de la base de données dans la chaîne de connexion.

Ce qui se passait était, quand vous avez construit/couru votre projet, votre application a été compilée et le fichier a été copié database.mdf ainsi à ApplicationProjectFolder\bin\Debug, de sorte que lorsque l'application a été exécuté, le fichier database.mdf était présent.Cela signifie qu'à chaque fois que vous avez exécuté votre projet, le fichier database.mdf "vide" a été copié de ApplicationProjectFolder\database.mdf à ApplicationProjectFolder\bin\Debug\database.mdf, d'où les données "disparaissant". En outre, le fichier database.mdf avait probablement "Copier Toujours" défini sur ses propriétés dans le projet. Donc, le "INSERT" fonctionnait, il était juste en cours de "réinitialisation" à chaque fois que vous avez exécuté votre application.

+0

Où étais-tu pour la dernière demi-journée? : P Merci beaucoup d'expliquer pourquoi les choses ont commencé à fonctionner maintenant! :) Comme je l'ai dit, si j'avais mentionné le scénario complètement, j'aurais pu obtenir la réponse plus tôt: | .. et +1 –

+0

@Senthil, pas un problème. J'ai eu la même chose pour moi avant, certes avec une base de données Sql Server Ce mais le principal est toujours là. Dès que j'ai vu votre question, je savais ce qui se passait =) PS - Y a-t-il une chance d'un vote positif sur la réponse et accepté? ;-) – Rob

+0

Ha, n'est-il pas écrit dans les statuts de l'étiquette que vous n'êtes pas censé demander des mises à jour? D'ailleurs, comment espères-tu gagner l'insigne Tenacious alors? (+1) – JohnB

Questions connexes