2013-05-12 3 views
1

J'utilise un datagridview et y ajoute des colonnes ... et par conséquent, avec des zones de texte, j'ajoute des données à la vue datagridview ... une liste de produits qu'un client souhaite acheter ..la première colonne est CustCode, ItemCode, Date et Quantity ..these sont les 4 colonnes et j'ajouter plusieurs lignes ..Comment ajouter toutes les colonnes dans une base de données SQL Server 2008

dire que je 5 inséré des lignes à la datagridview .... Je veux maintenant ajouter toutes les données le datagridview à une base de données SQL Server 2008 .... quelqu'un peut-il écrire le code entier? Je suis vraiment confus, ce code je ne semble pas fonctionner ... donne le paramètre

SqlConnection con = new System.Data.SqlClient.SqlConnection(); 
con = new System.Data.SqlClient.SqlConnection(); 
con.ConnectionString = "Data Source=rex;Initial Catalog=Project DB 1;Integrated Security=True"; 

con.Open(); 
SqlDataAdapter da = new SqlDataAdapter(); 

for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++) 
{ 
    String insertData = "INSERT INTO SalesTable(CustCode,ItemCode,Date,Quantity) " + 
         "VALUES (@CustCode,@ItemCode,@Date,@Quantity)"; 

    SqlCommand cmd = new SqlCommand(insertData, con); 
    cmd.Parameters.AddWithValue("@CustCode", dataGridView1.Rows[i].Cells[0].Value); 
    cmd.Parameters.AddWithValue("@ItemCode", dataGridView1.Rows[i].Cells[1].Value); 
    cmd.Parameters.AddWithValue("@Date", dataGridView1.Rows[i].Cells[2].Value); 
    cmd.Parameters.AddWithValue("@Quantity", dataGridView1.Rows[i].Cells[3].Value); 

    da.InsertCommand = cmd; 
    cmd.ExecuteNonQuery(); 
} 
con.Close(); 

Répondre

1

d'une erreur Si je comprends bien votre question, vous avez un ou plusieurs de vos cellules de grille qui ne contient pas une valeur et donc vous obtenez un paramètre- null pour insérer une valeur nULL dans la base de données que vous devez passer (comme valeur du paramètre) la DBNull.Value

ainsi, votre code pourrait être réécrite comme

using(SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=rex;Initial Catalog=Project DB 1;Integrated Security=True")) 
{ 
    con.Open(); 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if(!row.IsNewRow) 
     { 
      String insertData = "INSERT INTO SalesTable(CustCode,ItemCode,Date,Quantity) " + 
           "VALUES (@CustCode,@ItemCode,@Date,@Quantity)"; 

      SqlCommand cmd = new SqlCommand(insertData, con); 
      cmd.Parameters.AddWithValue("@CustCode", row.Cells[0].Value ?? DbNull.Value); 
      cmd.Parameters.AddWithValue("@ItemCode", row.Cells[1].Value ?? DBNull.Value); 
      cmd.Parameters.AddWithValue("@Date", row.Cells[2].Value ?? DBNull.Value); 
      cmd.Parameters.AddWithValue("@Quantity", row.Cells[3].Value ?? DBNUll.Value); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 

J'ai utilisé le C# Null Coalescing operator pour tester i f la valeur de l'une de vos cellules est nulle.
Aussi j'ai enlevé DataAdapter inutile et fixe la création, l'initialisation et l'élimination de la connexion

Voir aussi IsNewRow Property de DataGridViewRow

+0

@ Steve .. le code fonctionne ..mais ... si j'insérer 4 lignes .. 5 sont insérés dans la base de données ... le 5ème insère une ligne nulle complète .... plz aide – user2308205

+0

la ligne supplémentaire était en raison de l'option de données de l'option allowUserToAddRow .. après je l'ai mis à false il donne un erreur (l'index était hors plage Doit être non négatif et inférieur à la taille de la collection) .. aidez s'il vous plaît – user2308205

+0

Donc, vous avez une ligne templato pour ajouter de nouvelles lignes. Dans ce cas, vous devez éviter d'ajouter cette ligne à la base de données. Recharger la page et vérifier si la mise à jour fonctionne – Steve

Questions connexes