9
votes

Insérez toutes les données d'une base de données DataGridView à la fois

J'ai un DataGridView créé par diverses actions et la manipulation des données de l'utilisateur. Je veux insérer toutes les données de la grille de la base à la base de données à la fois, je sais que je pourrais essayer un code similaire à celui-ci: xxx

mais sera-t-il juste de créer une nouvelle connexion à chaque fois Un enregistrement est inséré? Le datagrid peut contenir de nombreuses lignes ... Y a-t-il un moyen de décoller toutes les données sur le serveur à la fois et à la boucle à l'intérieur de SQL pour insérer toutes les données?


0 commentaires

7 Réponses :


0
votes

Vous pouvez faire la même chose avec la connexion ouverte une seule fois. Quelque chose comme ça.

for(int i=0; i< dataGridView1.Rows.Count;i++)
  {
    string StrQuery= @"INSERT INTO tableName VALUES (" + dataGridView1.Rows[i].Cells["ColumnName"].Value +", " + dataGridView1.Rows[i].Cells["ColumnName"].Value +");";

  try
  {
      SqlConnection conn = new SqlConnection();
      conn.Open();

          using (SqlCommand comm = new SqlCommand(StrQuery, conn))
          {
              comm.ExecuteNonQuery();
          }
      conn.Close();

  }


0 commentaires

20
votes

Si vous déplacez votre boucle, vous n'aurez pas à effectuer plusieurs connexions. Juste une édition rapide à votre bloc de code (en aucun cas complètement correct): xxx

d'exécution de plusieurs commandes SQL à la fois, veuillez regarder ce lien: Plusieurs instructions en SQLCOMMAND unique


1 commentaires

Et si j'ai DataGrid au lieu de DataGridView ".Cells n'est pas disponible"



-2
votes
for (int i = 0; i < dataGridView2.Rows.Count; i++)
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=ID_Proof;Integrated Security=True");
                        SqlCommand cmd = new SqlCommand("INSERT INTO Restaurant (Customer_Name,Quantity,Price,Category,Subcategory,Item,Room_No,Tax,Service_Charge,Service_Tax,Order_Time) values (@customer,@quantity,@price,@category,@subcategory,@item,@roomno,@tax,@servicecharge,@sertax,@ordertime)", con);
                        cmd.Parameters.AddWithValue("@customer",dataGridView2.Rows[i].Cells[0].Value);
                        cmd.Parameters.AddWithValue("@quantity",dataGridView2.Rows[i].Cells[1].Value);
                        cmd.Parameters.AddWithValue("@price",dataGridView2.Rows[i].Cells[2].Value);
                        cmd.Parameters.AddWithValue("@category",dataGridView2.Rows[i].Cells[3].Value);
                        cmd.Parameters.AddWithValue("@subcategory",dataGridView2.Rows[i].Cells[4].Value);
                        cmd.Parameters.AddWithValue("@item",dataGridView2.Rows[i].Cells[5].Value);
                        cmd.Parameters.AddWithValue("@roomno",dataGridView2.Rows[i].Cells[6].Value);
                        cmd.Parameters.AddWithValue("@tax",dataGridView2.Rows[i].Cells[7].Value);
                        cmd.Parameters.AddWithValue("@servicecharge",dataGridView2.Rows[i].Cells[8].Value);
                        cmd.Parameters.AddWithValue("@sertax",dataGridView2.Rows[i].Cells[9].Value);
                        cmd.Parameters.AddWithValue("@ordertime",dataGridView2.Rows[i].Cells[10].Value);
                        con.Open();
                        cmd.ExecuteNonQuery();
                        con.Close();
                        MessageBox.Show("Added successfully!");

1 commentaires

Ce code crée toujours une nouvelle connexion de base de données pour chaque insert.



0
votes

Vous avez une erreur de syntaxe, veuillez essayer la syntaxe suivante comme indiqué ci-dessous: xxx


0 commentaires

4
votes

Je pense que le meilleur moyen consiste à utiliser Tableadapters plutôt que d'utiliser Commandes Objets, sa méthode de mise à jour envoie toutes les modifications Mades (mises à jour, inserts et suppresses) à l'intérieur d'un jeu de données ou de DataTable directement à la base de données. Habituellement, lors de l'utilisation d'un DataGridView, vous liez une liaison à une liaison qui vous permet d'interagir avec une source de données tels que des datables ou des jeux de données.

Si vous travaillez comme ceci, alors sur votre datagridview, vous pouvez simplement faire: P>

this.customersBindingSource.EndEdit();
this.myTableAdapter.Update(this.myDataSet.Customers);


2 commentaires

C'est la meilleure réponse car elle exploite les caractéristiques natives des adaptateurs de table


Et si l'utilisateur recherche d'une carte d'identité spécifique, il affiche une seule ligne d'enregistrement dans la DataGridView. Ensuite, il a apporté des modifications à cet enregistrement et à la mise à jour à l'aide de cet article.mytableadapter.update (). Cela mettra-t-il à jour l'enregistrement spécifique dans la base de données ou remplacera la base de données pour stocker uniquement une ligne d'enregistrement?



1
votes

S'il vous plaît voir si ci-dessous peut vous aider

classe post_sales xxx

classe d'extrémité


3 commentaires

Cependant, le code ci-dessus insère une ligne vierge dans la table de base de données SQL s'il vous plaît aider


J'ai ajouté un chèque à l'intérieur de la boucle


Si rw.cells ("colonne2"). Valeur <> rien que



0
votes

Essayez ce code de travail à 100%

string SQL = "", tableName = "tableName";
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    SQL = @"INSERT INTO " + tableName + " VALUES (";
    for (int col = 0; col < dataGridView1.ColumnCount; col++)
    {
        string data = "";
        if (dataGridView1.Rows[i].Cells[col].Value != null)
        {
            data = dataGridView1.Rows[i].Cells[col].Value.ToString();
        }
        SQL += "'" + data.Trim() + "'";
        if (col < dataGridView1.ColumnCount - 1)
        {
            SQL += ",";
        }
    }
    SQL += ")";
    string finalSQL = SQL;
    //INSERT to DB the finalSQL
}


0 commentaires