2008-10-19 5 views
0

J'ai écrit un programme qui inclut l'écriture et la lecture à partir de la base de données. Quand je lance l'application et essayez d'effectuer l'écriture que j'appelle la méthode suivante:Impossible d'insérer un enregistrement dans la table

public static void AddMessage(string callID, string content) 
    { 
     string select = 
      "INSERT INTO Sporocilo (oznaka_klica, smer, vsebina, prebrano, cas_zapisa) VALUES (@callId, 0, @content, 0, @insertTime)"; 
     SqlCommand cmd = new SqlCommand(select, conn); 
     cmd.Parameters.AddWithValue("callId", callID.ToString()); 
     cmd.Parameters.AddWithValue("content", content); 
     cmd.Parameters.AddWithValue("insertTime", "10.10.2008"); 
     try 
     { 
      conn.Open(); 
      cmd.ExecuteScalar(); 
     } 
     catch(Exception ex) 
     { 
      string sDummy = ex.ToString(); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

Après l'appel de méthode que j'ai lu tous les enregistrements de la table et les afficher sous forme. L'enregistrement inséré avant l'actualisation peut être vu, mais lorsque je quitte l'application et que je regarde la table, je ne vois pas l'enregistrement.

Est-ce que quelqu'un sait ce qui pourrait causer un tel comportement?

+0

Il semble qu'il y ait une exception et vous attraper. Essayez de déboguer et vérifier ex.Message – mohammedn

Répondre

1

Effectuez-vous une validation après cela? Il peut être en cours d'exécution de votre déclaration, mais ne pas valider les modifications et effectuer une restauration implicite. Je pense que la gestion des exceptions semble douteuse. Il est inutile d'attraper quelque chose à moins que vous ne puissiez le gérer d'une manière ou d'une autre. Le niveau supérieur de votre infrastructure est l'endroit où vous pouvez intercepter et signaler des exceptions inattendues.

0

Avez-vous essayé de définir la valeur de retour de la méthode ExecuteScalar sur un int puis de vérifier la valeur par rapport à la table?

ExecuteScalar -

exécute la requête et renvoie la première colonne de la première ligne dans le jeu de résultats renvoyés par la requête. Des colonnes supplémentaires ou lignes sont ignorées

public static int AddMessage(string callID, string content) 
    { 
     Int32 newProdID = 0 
     string select = 
      "INSERT INTO Sporocilo (oznaka_klica, smer, vsebina, prebrano, cas_zapisa) VALUES (@callId, 0, @content, 0, @insertTime); SELECT CAST(scope_identity() AS int);"; 
     SqlCommand cmd = new SqlCommand(select, conn); 
     cmd.Parameters.AddWithValue("callId", callID.ToString()); 
     cmd.Parameters.AddWithValue("content", content); 
     cmd.Parameters.AddWithValue("insertTime", "10.10.2008"); 
     try 
     { 
      conn.Open(); 
      newProdID = (Int32)cmd.ExecuteScalar(); 
     } 
     catch(Exception ex) 
     { 
      string sDummy = ex.ToString(); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
     return (int)newProdID 
    } 
+0

INSERT ne retourne pas un jeu de résultats. – Joe

+0

Excuses, oublié de mettre l'instruction SELECT après l'INSERT. Mise à jour maintenant –

+0

Le problème principal était le ConnectionString pas la méthode ExecuteScalar() –

0

J'ai trouvé le problème. J'ai modifié la chaîne de connexion généré automatiquement

connectionString = "données source = \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ URSZRDB.mdf;. Intégrée sécurité = True; Instance utilisateur = True"

avec

connectionString = "Data Source = \ SQLEXPRESS; AttachDbFilename = C:. \ Users \ Niko \ Documents \ de Visual studio 2008 \ Projects \ URSZRWAPChat \ URSZRWAPChat \ URSZRDB.mdf; Integrated Sécurité = Vrai, instance d'utilisateur = Vrai "

et maintenant cela fonctionne.

Ce n'est pas la première fois que je vous écris ce genre de programme et jusqu'à présent, tout a bien passé de cette façon ...

Questions connexes