2009-05-18 5 views
1

J'utilise ce code pour mettre à jour les données dans la table de base de données. Peut-on réutiliser le même code pour mettre à jour un ensemble de données? Merci.Est-il possible de mettre à jour/insérer des données dans un ensemble de données avec SqlCommand?

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString)) 
     { 
      string sql = "UPDATE tbh_Categories SET Title = @Title, 
          Description = @Description 
          WHERE CategoryID = @CategoryID"; 
      SqlCommand cmd = new SqlCommand(sql, cn); 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.Add("@CategoryID", SqlDbType.Int).Value = category.ID; 
      cmd.Parameters.Add("@Title", SqlDbType.NVarChar).Value = category.Title; 
      cmd.Parameters.Add("@Description", SqlDbType.NVarChar).Value = category.Description; 

      cn.Open(); 
      int ret = cmd.ExecuteNonQuery(); 

      return (ret == 1); 
     } 

Répondre

0

La réponse est non. Mais, vous pouvez utiliser DataTable.Select pour identifier les lignes dans le DataTable que vous souhaitez mettre à jour. Mais alors vous devrez modifier la table elle-même "à la main".

Je dois vous demander ce que vous essayez de faire ... essayez-vous, par exemple, de mettre en cache des données en utilisant un DataSet modifiable? Ou essayez-vous d'éviter les voyages de base de données supplémentaires? Il pourrait y avoir une meilleure façon de faire ce que vous essayez de faire si vous nous le faites savoir. Si vous voulez une base de données en mémoire, il y a are lots out there. Par commentaire: Consultez SQLite. Il y a .NET Wrappers qui pourrait vous laisser faire ce que vous voulez.

+0

comme, j'ai écrit dans un commentaire ci-dessus. Je veux créer une démo temporaire de mon application, sans laisser les gens réellement supprimer et mettre à jour les enregistrements de la table. Donc, pour cela, j'ai décidé d'utiliser le jeu de données et de le garder en session, donc toute manipulation serait faite sur ce jeu de données (ne vous inquiétez pas du gaspillage de mémoire car il sera limité) – markiz

0

Le même code exact? Non. SqlConnection (et SqlCommand) est spécifique à SqlServer. DataSet existe en dehors de ce contexte, vous devrez donc réécrire votre code pour permettre la mise à jour d'un DataSet.

+0

Je veux dire en utilisant la syntaxe SQL, si c'est possible alors comment? – markiz

0

Non, je ne pense pas. Soit boucle sur les lignes de votre DataTable, ou mettre à jour la base de données et recharger.

+0

J'ai besoin de stocker et de manipuler la base de données en mémoire, comme démonstration de démonstration (Je ne veux pas que les gens modifient ma base de données). Ainsi, à chaque session, les données sont "restaurées". – markiz

0

Vous devez modifier légèrement votre code. Vous devez utiliser une instance de SqlDataAdapter et utiliser sa méthode Update. Un petit code sample du MSDN:

public DataSet CreateCmdsAndUpdate(string connectionString, 
    string queryString) 
{ 
    using (OleDbConnection connection = new OleDbConnection(connectionString)) 
    { 
     OleDbDataAdapter adapter = new OleDbDataAdapter(); 
     adapter.SelectCommand = new OleDbCommand(queryString, connection); 
     OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); 

     connection.Open(); 

     DataSet customers = new DataSet(); 
     adapter.Fill(customers); 

     //code to modify data in dataset here 

     adapter.Update(customers); 

     return customers; 
    } 
} 
Questions connexes