2009-11-24 7 views
4

J'ai besoin d'écrire un programme. Une partie du programme consiste à écrire dans une base de données sql (.mdf). J'ai eu beaucoup de mal à essayer d'ajouter une nouvelle ligne à ma table (appelée: "Données"). Voici le code:Comment ajouter une nouvelle ligne à une table existante en utilisant le serveur C# sql

... 
DataSet ds = new DataSet(); 
System.Data.SqlClient.SqlDataAdapter da; 
DataRow dRow; 
string sql = "SELECT * From Data"; 
da = new System.Data.SqlClient.SqlDataAdapter(sql, con); 
... 
System.Data.SqlClient.SqlCommandBuilder cb; 
cb = new System.Data.SqlClient.SqlCommandBuilder(da); 
dRow = ds.Tables["Data"].NewRow(); 
dRow[0] = "my_data1"; 
dRow[1] = "my_data2"; 
dRow[2] = "my_data3"; 
... 
ds.Tables["Data"].Rows.Add(dRow); 
da.Update(ds, "Data"); 
... 

J'exécuter ce code, mais les données ne aient pas été enregistrées à la table. Est-ce que quelqu'un sait comment entrer une nouvelle rangée à la table et la sauver?

Répondre

7

Vous avez besoin d'un InsertCommand dans votre SqlDataAdapter.

EDIT:

Voici un exemple rapide, je fouetté. Il y en a beaucoup d'autres, mais cela devrait vous aider à démarrer. Il suppose que vous avez une table (dbo.Foos) avec deux colonnes (Foo int, Bar nvarchar (50)).

namespace DataAdapterSample 
{ 
    using System; 
    using System.Data; 
    using System.Data.SqlClient; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (SqlConnection connection = new SqlConnection(@"Data Source=[your server];Initial Catalog=[your database];Integrated Security=true;")) 
      { 
       using (SqlDataAdapter dataAdapter = new SqlDataAdapter()) 
       { 
        dataAdapter.SelectCommand = new SqlCommand("select Foo, Bar from dbo.Foos", connection); 
        dataAdapter.InsertCommand = new SqlCommand("insert into dbo.Foos (Foo, Bar) values (@Foo, @Bar)", connection); 
        dataAdapter.InsertCommand.Parameters.Add(new SqlParameter("Foo", SqlDbType.Int, 4, "Foo")); 
        dataAdapter.InsertCommand.Parameters.Add(new SqlParameter("Bar", SqlDbType.NText, 50, "Bar")); 

        using (DataSet dataSet = new DataSet()) 
        { 
         dataAdapter.Fill(dataSet); 

         Console.WriteLine("There are {0} rows in the table", dataSet.Tables[0].Rows.Count); 

         DataRow newRow = dataSet.Tables[0].NewRow(); 
         newRow["Foo"] = 5; 
         newRow["Bar"] = "Hello World!"; 
         dataSet.Tables[0].Rows.Add(newRow); 

         dataAdapter.Update(dataSet); 
        }     

        //Just to prove we inserted 
        using (DataSet newDataSet = new DataSet()) 
        { 
         dataAdapter.Fill(newDataSet); 
         Console.WriteLine("There are {0} rows in the table", newDataSet.Tables[0].Rows.Count);     
        }     
       } 
      } 
      Console.ReadLine();   
     } 
    } 
} 
+0

Merci pour votre réponse. pouvez-vous s'il vous plaît écrivez-moi un échantillon, parce que j'essaie d'utiliser le 'InsertCommand' mais je ne parviens pas à. Merci beaucoup encore! – menachem

0

Deux choses que je vois, vous n'êtes pas initialiser votre Dataset (ds) ou SqlDataAdapter (da) de toute façon (à moins que vous laissant simplement que pour la simplification de la poste). Une partie de l'initialisation du da lui donnera une véritable commande sql.

+0

Il l'initialise: chaîne sql = "SELECT * From Data"; da = new System.Data.SqlClient.SqlDataAdapter (sql, con); Il a juste besoin d'une InsertCommand au da –

-1

Essayez plutôt de mettre

dRow = new DataRow(); 

au lieu de

dRow = ds.Tables["Data"].NewRow(); 

et changer

da.Update(ds, "Data"); 

à

da.Update(ds); 
+1

-1 La classe DataRow a un constructeur interne. Vous ne pouvez pas en créer un en dehors d'une table –

1

Forcer l'ensemble de données pour accepter les changements IE ds.Acceptchanges à votre code

Questions connexes