2010-09-22 7 views
0

Je viens de commencer à apprendre VB.Net et SQL. Maintenant, je crée mon premier logiciel mais j'ai un problème: j'ai deux tables dans ma base de données et j'ai réussi à transférer des données de table1 à table2. Comment puis-je simplement insérer des lignes spécifiques de table1 à table2. Je ne veux pas copier toutes les données de table1 à table2; Je veux juste copier les lignes sélectionnées.VB.net et SQL Question

Voici mon code:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
     cmd.CommandText = "INSERT INTO returns(Department, Purpose, Item_details, Requested_by, Approved_by, ReturnDate) SELECT Department, Purpose, Items_Details, Requested_by, Approved_by, Date FROM borrow WHERE Date= '" & Today.Date.ToShortDateString & "';" 
     cmd.Connection = con 
     Try 
      con.Open() 
      cmd.ExecuteNonQuery() 
     Finally 
      con.Close() 
     End Try     
End Sub 

J'ai un listbox qui a une sourcebinding qui est borrow et je ne veux les éléments sélectionnés une seule rangée à transférer à ma table returns mais je ne sais pas comment fais le. Chaque fois que je clique sur le bouton, tous les éléments du tableau borrow seront copiés dans le tableau returns.

+3

Veuillez ne pas écrire de code concaténant SQL. Cela vous laisse ouvert pour les attaques par injection SQL. Au lieu de cela, utilisez des paramètres. –

+2

@Steven: Ma première pensée fut: "vrai, mais il concatène une chaîne connue," Date.ToShortDateString. "Puis mon esprit se mit à réfléchir à la façon dont on pourrait exploiter cela avec des paramètres régionaux inattendus –

+0

@Steve Je ne savais pas que .. merci quand même .. je serai plus prudent la prochaine fois .. – demic0de

Répondre

0

Vous devez obtenir les critères de ligne sélectionnés dans la liste et l'ajouter à la clause where de votre SQL.

+0

Merci .. pouvez-vous me donner un exemple de code sur la façon d'obtenir des critères de ligne dans une liste? .. – demic0de

+0

http://www.startvbdotnet.com/controls/listbox.aspx – Beth

+0

Salut j'ai fait quelques changements mais je suis "membre public 'sélectionné' sur le type 'DataRowView' pas trouvé." Quand je cours mon code .. – demic0de

2

Comme suggéré dans d'autres commentaires, c'est une bonne idée de prendre l'habitude de ne pas utiliser la concaténation de chaînes pour les valeurs de paramètres dans une instruction SQL.

Le code suivant montre comment utiliser les paramètres SQL et obtenir les critères de ligne de la zone de liste.

Private Sub Button1_Click(ByVal sender As System.Object, 
         ByVal e As System.EventArgs 
) Handles button1.Click 

    ' Note that I am using an XML literal to improve code readability. ' 
    Dim insertCommand = <xml> 
     INSERT INTO returns(
      Department, 
      Purpose, 
      Item_details, 
      Requested_by, 
      Approved_by, 
      ReturnDate 
     ) 
     SELECT 
      Department, 
      Purpose, 
      Items_Details, 
      Requested_by, 
      Approved_by, 
      Date 
     FROM borrow 
     WHERE BorrowId = @BorrowId; 
    </xml> 

    Dim param = cmd.CreateParameter() 
    param.ParameterName = "@BorrowId" 
    param.Value = listBox.SelectedValue 

    cmd.CommandText = insertCommand.Value 
    cmd.Parameters.Add(param) 

    cmd.Connection = con 
    Try 
     con.Open() 
     cmd.ExecuteNonQuery() 
    Finally 
     con.Close() 
    End Try 

End Sub 
+0

Merci de m'avoir appris à travailler avec les paramètres ^^ .. vraiment l'apprécier .. mais je n'arrive toujours pas à comprendre comment ajouter seulement les lignes que j'ai sélectionnées .. – demic0de

+0

Im obtenir une erreur Aucun mappage n'existe à partir du type d'objet System.Data .DataRowView à un type natif de fournisseur géré connu. – demic0de

+0

Quelles interface utilisateur utilisent WinForms ou WPF? –