2010-11-26 20 views
1

J'utilise ce code pour supprimer une ligne dans une table, mais cela ne fonctionne pas. Est-ce que je fais une erreur ou manque quelque chose?Comment supprimer une ligne dans une table dans Npgsql?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using Npgsql; 

namespace WindowsFormsApplication4 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button_RemoveBook_Click(object sender, EventArgs e) 
     { 
      NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=5432;User Id=user;Password=1234;Database=library;"); 
      conn.Open(); 
      string sql = "DELETE FROM books WHERE BookID=1;"; 
      NpgsqlCommand command = new NpgsqlCommand(sql, conn); 
      conn.Close(); 
     } 
    } 
} 

La tâche ci-dessus s'exécute, je remarque que la base de données n'a apporté aucune modification. Le bookID = 1, qui est la 1ère ligne dans la base de données reste encore.

J'ai essayé d'utiliser la commande INSERT, cela fonctionne. De nouvelles données ont été insérées dans la dernière rangée de la table. Le code ci-dessous fonctionne bien.

private void button_addBook_Click(object sender, EventArgs e) 
{ 
    NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=5432;User Id=user;Password=1234;Database=library;"); 
    conn.Open(); 
    string addRow = string.Format("insert into books values(50,'Time','Frank','Science')"); 
    NpgsqlCommand command = new NpgsqlCommand(addRow, conn); 
    conn.Close(); 

Une idée? Merci.


Réponse à: Astander

Il affiche ce message d'erreur:
http://i901.photobucket.com/albums/ac218/pcser/error.jpg

Répondre

1

astander et les gars.
Merci pour votre aide.
Après plusieurs essais, j'ai trouvé les solutions.

BookID est le nom d'une colonne, il faut ajouter ce symbole «» avant et après le nom de la colonne.

Par conséquent, la manière correcte est:

string sql = "DELETE FROM books WHERE \"BookID\"=1;"; 

Ceci est faux:

string sql = "DELETE FROM books WHERE BookID=1;"; 


Merci encore pour votre aide.

+2

C'est une mauvaise idée de nommer des colonnes ou des tableaux dans un cas mélangé. Je recommande de le renommer bookid et jamais utiliser des guillemets: «alter table books renommer la colonne" BookID "pour bookid» – Tometzky

+0

merci pour votre commentaire mec. Je prends note de cela. – mjb

0

Avez-vous essayé d'utiliser NpgsqlCommand.ExecuteNonQuery Method

Quelque chose comme

private void button_RemoveBook_Click(object sender, EventArgs e) 
{ 
    NpgsqlConnection conn = new NpgsqlConnection("Server=localhost;Port=5432;User Id=user;Password=1234;Database=library;"); 
    conn.Open(); 
    string sql = "DELETE FROM books WHERE BookID=1;"; 
    NpgsqlCommand command = new NpgsqlCommand(sql, conn); 
    command.ExecuteNonQuery(); //this line here?? 
    conn.Close(); 
} 
+0

Il affiche ce message d'erreur: http://i901.photobucket.com/albums/ac218/pcser/error.jpg La capture d'écran de la base de données: http://i901.photobucket.com/albums/ac218/pcser/ database.jpg – mjb