2010-09-30 24 views
0

J'ai une zone de texte et un bouton sur un formulaire.Utilisation d'une clause IN dans Vb.net pour enregistrer quelque chose dans la base de données en utilisant SQL

Je souhaite exécuter une requête (dans Vb.Net) qui produira une requête avec les valeurs IN.

Ci-dessous un exemple de mon code

myConnection = New SqlConnection("Data Source=sqldb\;Initial Catalog=Rec;Integrated Security=True") 
myConnection.Open() 
myCommand = New SqlCommand("UPDATE dbo.Recordings SET Status = 0 where RecID in ('" & txtRecID.Text & "') ", myConnection) 
ra = myCommand.ExecuteNonQuery() 
myConnection.Close() 
MsgBox("Done!", _ 
MsgBoxStyle.Information, "Done") 

Quand j'entre une valeur unique, il fonctionne mais quand j'entre valeurs par des virgules, il renvoie une erreur:

"Conversion failed when converting the varchar value '1234,4567' to data type int."

Quelqu'un pourrait-il s'il vous plaît aidez-moi résoudre ceci ou s'il y a une alternative?

Merci beaucoup

+0

Essayez 'MsgBox (myCommand.CommandText)' à la place. Tu vas le voir. – GSerg

Répondre

3

Essayez de supprimer les guillemets simples vous envelopper les valeurs IN dans:

myCommand = New SqlCommand("UPDATE dbo.Recordings SET Status = 0 WHERE RecID IN (" & txtRecID.Text & ") ", myConnection) 
+0

Cela fonctionne très bien! Merci beaucoup. Alors, que font les guillemets simples? je veux juste le comprendre –

1

Si vous testez une variable STRING pour plusieurs valeurs, ces valeurs multiples aurait besoin de être entre guillemets.

La raison pour laquelle votre première tentative a fonctionné «presque» était que vous auriez pu générer votre SqlCommand avec chaque valeur entre guillemets. I.E.
UPDATE dbo.Recordings SET Status = 0 where RecID IN ('1234', '5678')

Dans ce cas, T-SQL aurait fait une conversion implicite de chacune des valeurs de chaîne INT, qui est ce qu'il cherchait à faire quand vous lui avez donné « 1234, 5678 » mais ISN 't déchiffrable comme INT.