2017-04-18 1 views
0

Je travaille sur un projet (non public) et j'essaie de mettre à jour mon code de base de données à l'aide d'ADO.NET. J'ai écrit le code de travail pour insérer, récupérer tout, récupérer par ID, et récupérer par statut, celui que je ne peux pas comprendre est la mise à jour. J'ai fait pas mal de recherches et le code que j'ai est représentatif des informations que j'ai trouvées et j'ai essayé de m'adapter à mon programme. J'utilise juste des données de poubelle pour essayer de voir la mise à jour avant d'utiliser n'importe quelle sorte de données tangibles.Mise à jour de plusieurs colonnes dans une ligne à l'aide d'ADO.NET

Ci-dessous est mon code de requête dans une classe dédiée aux requêtes.

public Ticket UpdateTicket(int id, string status, int customerId, int helpDeskStaffId, string problemDesc, string resolution, string followUpRequired, string followUpComplete, DateTime ticketDate, DateTime resolvedDate) 
    { 
     Ticket ticket = new Ticket(id, status, customerId, helpDeskStaffId, problemDesc, resolution, followUpRequired, followUpComplete, ticketDate, resolvedDate); 
     SqlCommand cmdInsert; 
     SqlConnection conn = null; 
     try 
     { 
      string connectString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString; 
      conn = new SqlConnection(connectString); 
      "UPDATE Ticket SET Status = @Status, HelpDeskStaffId = @HelpDeskStaffId, ProblemDesc = @ProblemDesc, Resolution = @Resolution, FollowUpRequired = @FollowUpRequired, FollowUpComplete = @FollowUpComplete, TicketDate = @TicketDate, ResolvedDate = @ResolvedDate, CustomerId = @CustomerId WHERE [email protected]"; 
      conn.Open(); 
      cmdInsert = new SqlCommand(sql2, conn); 
      cmdInsert.Parameters.AddWithValue("@id", id); 
      cmdInsert.Parameters.AddWithValue("@Status", status); 
      cmdInsert.Parameters.AddWithValue("@HelpDeskStaffId", helpDeskStaffId); 
      cmdInsert.Parameters.AddWithValue("@ProblemDesc", problemDesc); 
      cmdInsert.Parameters.AddWithValue("@Resolution", resolution); 
      cmdInsert.Parameters.AddWithValue("@FollowUpRequired", followUpRequired); 
      cmdInsert.Parameters.AddWithValue("@FollowUpComplete", followUpComplete); 
      cmdInsert.Parameters.AddWithValue("@TicketDate", ticketDate); 
      cmdInsert.Parameters.AddWithValue("@ResolvedDate", resolvedDate); 
      cmdInsert.Parameters.AddWithValue("@CustomerId", customerId); 

     } 
     catch (SqlException ex) 
     { 
      Console.Error.WriteLine(ex.Message); 
     } 
     finally 
     { 
      if (conn != null) 
       conn.Close(); 
     } 
     return ticket; 
    } 

Aucune donnée n'est mise à jour à l'intérieur de la ligne en corrélation avec l'ID saisi.

TicketUtil ticketUtil = new TicketUtil(); 
      Ticket ticket = ticketUtil.UpdateTicket(6, "Open", 1, 3, "Broken Pencils", "Buy New One", "No", "No", DateTime.Today, new DateTime(1753, 1, 1)); 

Mon objectif final est de pouvoir coder une mise à jour à l'aide du code ci-dessus de cette ligne, et ensuite utiliser une console qui avec invites pour permettre la mise à jour des informations. Cependant, sans même être en mesure de coder en dur la solution, je ne peux même pas penser à la version d'entrée de l'utilisateur pour le moment.

+2

Où êtes-vous * * exécutiez la commande? Vous semblez également mettre à jour avec la valeur existante + la nouvelle valeur? Est-ce vraiment ce que vous voulez faire? –

+0

@alexK. Désolé, j'ai oublié de mentionner que l'exécution se déroule dans la classe Programme (pilote/principal). Je vois maintenant que les valeurs sont rassemblées deux fois, j'essayais d'entrer la méthode utilisée dans l'un des autres threads ADO.NET. –

+0

Je veux dire où est 'cmdInsert.ExecuteNonQuery()'? Si vous n'exécutez pas le comportement attendu, il n'y a pas d'exécution après tout. –

Répondre

0

Votre instruction de mise à jour semble erronée. Essayez ceci:

UPDATE Ticket 
SET Status = @Status, 
HelpDeskStaffId = @HelpDeskStaffId, 
ProblemDesc = @ProblemDesc, 
Resolution = @Resolution, 
FollowUpRequired = @FollowUpRequired, 
FollowUpComplete = @FollowUpComplete, 
TicketDate = @TicketDate, 
ResolvedDate = @ResolvedDate, 
CustomerId = @CustomerId 
WHERE [email protected]; 

Mise à jour
Comme Alex K. a écrit dans son commentaire, vous n'êtes pas exécuter la commande.

Voici ce que je pense que votre code devrait ressembler à:

public Ticket UpdateTicket(int id, string status, int customerId, int helpDeskStaffId, string problemDesc, string resolution, string followUpRequired, string followUpComplete, DateTime ticketDate, DateTime resolvedDate) 
{ 
    var ticket = new Ticket(id, status, customerId, helpDeskStaffId, problemDesc, resolution, followUpRequired, followUpComplete, ticketDate, resolvedDate); 

    var connectString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;    
    var sql2 = "UPDATE Ticket SET Status = @Status, HelpDeskStaffId = @HelpDeskStaffId, ProblemDesc = @ProblemDesc, Resolution = @Resolution, FollowUpRequired = @FollowUpRequired, FollowUpComplete = @FollowUpComplete, TicketDate = @TicketDate, ResolvedDate = @ResolvedDate, CustomerId = @CustomerId WHERE [email protected]"; 

    using(var conn = new SqlConnection(connectString)) 
    { 
     using(var cmd = new SqlCommand(sql2, conn)) 
     { 
     cmd.Parameters.AddWithValue("@id", id); 
     cmd.Parameters.AddWithValue("@Status", status); 
     cmd.Parameters.AddWithValue("@HelpDeskStaffId", helpDeskStaffId); 
     cmd.Parameters.AddWithValue("@ProblemDesc", problemDesc); 
     cmd.Parameters.AddWithValue("@Resolution", resolution); 
     cmd.Parameters.AddWithValue("@FollowUpRequired", followUpRequired); 
     cmd.Parameters.AddWithValue("@FollowUpComplete", followUpComplete); 
     cmd.Parameters.AddWithValue("@TicketDate", ticketDate); 
     cmd.Parameters.AddWithValue("@ResolvedDate", resolvedDate); 
     cmd.Parameters.AddWithValue("@CustomerId", customerId); 
     try 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
     catch (SqlException ex) 
     { 
      Console.Error.WriteLine(ex.Message); 
     } 
     } 
    } 
    return ticket; 
} 
+0

Mis à jour en essayant cela, pas de chance. Ne pas recevoir d'erreurs. –

+0

J'ai modifié ma réponse. –

+0

Merci et merci AlexK. pour avoir pris le temps de répondre. C'est très apprécié. –