2017-09-16 1 views
0

comment insérer sans changer la valeur de la zone de liste à la base de données j'ai 3 boîtes liste et une table dans la base de données, le code ...comment insérer la même valeur de ListBox à la base de données

private void Order() 
    { 
     using (SqlConnection connection = new SqlConnection(connectionString1)) 
     { 
      String query = "INSERT INTO Tbl_order (OrderName,Quantity,Price,Serves_way,Date) VALUES (@OrderName,@Quantity, @Price,'"+servers+"','" + time1.ToString(format1)+"')"; 


       connection.Open(); 

       for (int i = 0; i < lst_OrderName.Items.Count; i++) 
       { 
        using (SqlCommand command = new SqlCommand(query, connection)) 
        { 
         command.Parameters.Add("OrderName", SqlDbType.NVarChar).Value = lst_OrderName.GetItemText(lst_OrderName.GetSelected(i)); 
         command.Parameters.Add("Quantity", SqlDbType.Int).Value = Convert.ToInt32(lst_QTY.GetSelected(i)); 
         command.Parameters.Add("Price", SqlDbType.Money).Value = Convert.ToDouble(lst_Price2.GetSelected(i)); 

         /* command.Parameters.AddWithValue("@OrderName", lst_OrderName.GetItemText(lst_OrderName.Items)); 
         command.Parameters.AddWithValue("@Quantity", lst_QTY.GetItemText(lst_QTY.Items)); 
         command.Parameters.AddWithValue("@Price", lst_Price2.GetItemText(lst_Price2.Items));*/ 

        command.ExecuteNonQuery(); 
        } 
       } 

     } 
    } 

Ainsi les 3 zones de liste comme celle-ci avec la chaîne de valeur, int et double

enter image description here

et les valeurs insérées dans la base de données comme ce

enter image description here

Comme vous le voyez, ils ne sont pas les mêmes valeurs que les boîtes-liste des valeurs

comment insérer la même valeur de ListBox à la base de données?

+0

GetSelected retourne la ligne sélectionnée pas n'importe quelle rangée de vos listbox – Steve

+0

yeap je veux savoir comment les insérer tous à la base de données sans les sélectionner tous –

Répondre

1

Vous pouvez utiliser une requête préparée. Vous préparez la requête en ajoutant les paramètres et leur type de données, la longueur de la colonne est facultative. Puis appelez Prepare(). Après que vous attribuez les données aux paramètres par index ou par nom de colonne et enfin appeler ExecuteNonQuery

private void Order() 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString1)) 
    { 
     String query = "INSERT INTO Tbl_order (OrderName,Quantity,Price,Serves_way,Date) VALUES (@OrderName,@Quantity, @Price,'"+servers+"','" + time1.ToString(format1)+"')"; 


     connection.Open(); 
     using (SqlCommand command = new SqlCommand(query, connection)) 
     { 
      // Add the length of this text column as third parameter... 
      command.Parameters.Add("OrderName", SqlDbType.NVarChar); 
      command.Parameters.Add("Quantity", SqlDbType.Int); 
      command.Parameters.Add("Price", SqlDbType.Money); 
      command.Prepare(); 

      for (int i = 0; i < lst_OrderName.Items.Count; i++) 
      { 
       // Dont know if the .ToString() calls are necessary... 
       command.Parameters[0].Value = lst_OrderName.GetItemText(lst_OrderName.Items[i].ToString()); 
       command.Parameters[1].Value = Convert.ToInt32(lst_QTY.Items[i].ToString()); 
       command.Parameters[2].Value = Convert.ToDouble(lst_Price2.Items[i].ToString()); 
       command.ExecuteNonQuery(); 
      } 
     } 

    } 
} 

EDIT: mis à jour la réponse à obtenir les éléments correctement de chaque ListBox (comme Steve déjà mentionné)

+0

bonjour ^^ j'ai essayé mais j'ai toujours donné le même problème de valeur insérée dans la base de données je ne sais pas Qu'est-ce qui ne va pas . –

+1

@MaxThunder Réponse mise à jour. Vous obtenez les éléments en accédant à la propriété '.Items' de la ListBox, en spécifiant l'index de ligne dans' ['et'] '. La valeur renvoyée étant toujours un objet, vous devrez peut-être la convertir ou la convertir au type dont vous avez besoin. – Michael

+0

cela fonctionne, je suis tellement heureux haha ​​merci beaucoup ^^ merci. –