J'ai ce code simple mais cela montre une erreur. Je ne sais pas où je vais mal. Il affiche une erreur dans la dernière ligne.
linq_testDataContext db = new linq_testDataContext();
var remove = from aremove in db.logins
where aremove.username == userNameString && aremove.Password == pwdString
select aremove;
db.logins.DeleteOnSubmit(remove);
6 Réponses :
deleteonsubmit code> prend un seul objet. Vous passez un iEnumerable deleteallonsubmit code> à la place ou sélectionnez un seul objet à partir de votre collection résultante, comme celui-ci: var remove = (from aremove in db.logins
where aremove.username == userNameString
&& aremove.Password == pwdString
select aremove).FirstOrDefault();
if(remove != null)
{
db.logins.DeleteOnSubmit(remove);
}
@Philip Maintenant, la requête fonctionne bien, mais les données ne sont pas supprimées de la table. il est toujours là .. comment puis-je résoudre cela..matanks
Exécutez le débogueur et regardez ce qui est dans ce supprimer la variable code>. Je suppose qu'il n'y a pas d'élément à l'intérieur, donc rien n'est supprimé.
Au fait: pourquoi vérifiez-vous contre le mot de passe de votre requête? Je suppose que le nom d'utilisateur seul est disjonctionnel de tous les autres, n'est-ce pas?
Sir je suis juste tester ce temps de requête Son travail ou non..J'ai l'écriture de Linq pour la première fois ... j'ai le même problème avec insert ... Ma requête indique-t-on les chnages dans la base de données ...
C'est difficile, parce que nous ne connaissons pas votre base de données ni le contenu de celui-ci. Avez-vous défini un point d'arrêt avant de démarrer le débogueur et définissez une montre sur la variable supprimer code>? Quel est le contenu de cette collection au moment de l'exécution?
Monsieur, j'ai une petite table ayant trois colonnes ... UserID (int), nom d'utilisateur (Nvarparar (50)), mot de passe (NvarchaRar (50)) L'ID utilisateur est une clé primaire et est auto-interprétation. Comment voir le contenu des collections à l'exécution ..
Commencez à lire ceci: msdn.microsoft.com/en-us/library/sc65sadd .aspx . Fondamentalement, vous définissez un point d'arrêt sur la ligne où vous effectuez l'appel removeallonsubmit code>, puis vous exécutez le débogueur. Il détient l'exécution du programme à exactement cette ligne. Maintenant, vous pouvez déplacer votre curseur sur la variable code> Supprimer code>. Vous développez cet arbre, en cliquant sur "View des résultats", vous voyez soit des objets Connexion code> ou juste une collection vide.
Ok..sir..yes je réglais la ligne DeleteLlonsubmit () sur le point d'arrêt et maintenant je le débogage ...
Lorsque je déplace mon curseur sur Supprimer la variable, cela montre ceci: (variable locale) iquéryable
Il y a un signe plus juste à côté de celui-ci, cliquez dessus pour agrandir la vue. Cliquez sur le signe plus en regard de "Vue des résultats" et dites-nous ce qu'il y montre.
Je veux dire les résultats La vue est vide monsieur.
au lieu de:
db.logins.DeleteAllOnSubmit(remove.ToList());
Merci ... Oui, il ne montre aucune erreur, mais les données sont toujours dans la base de données ... c'est non supprimé ... Je rafraîchis la base de données..Les données sont toujours là .. Comment puis-je résoudre ce problème.
Bon point Nick, je l'ai pris pour acquis à appeler soumissions code> :)
J'appelle des soumetves mais toujours pas de changement de base de données ... j'ai essayé de lancer du débogueur (f5) ... mais ne montre aucune erreur ... voici mon code ... var retirer = de aremove in db.logins où aremove.username == "admin" && aremove.password == "kk" sélectionnez aremove; db.logins.daleteallonsubmit (supprimer); db.submitchanges ();
@Ani - Quelle valeur supprimer.count () code> ont?
@Aani - Désolé, je voulais l'exécuter dans le débogueur lorsque vous êtes sur le deleteallonsubmit () code> ligne. Vous pouvez l'exécuter dans la fenêtre immédiate, utiliser Ctrl + Alt + i pour le faire monter.
Je suppose que c'est comme ça que je shake faire .... Définissez le point d'arrêt sur DeleteLlonsubmit (), puis essayez de déboguer (F5) .. N'est-ce pas monsieur ??
@Ani - Correct, définissez un point de rupture, lorsqu'il atterrit sur cette ligne, Ctrl + Alt + I pour ouvrir la fenêtre immédiate, voir le résultat de supprimer.count () code> est.
La fenêtre immédiate est vide monsieur.
@Nick après avoir défini le point de rupture sur cette ligne et le déboguer. Lorsque je déplace mon curseur sur Supprimer la variable, cela montre ceci: (variable locale) iquéryable
@Ani - alors c'est le problème, votre requête ne trouve rien à supprimer ... alors rien n'a supprimé. Est-il possible que vous ayez besoin d'une requête insensible à la casse lors de la sélection de l'utilisateur ou de quelque chose?
Je vérifie sa double vérification ... Tous les minuscules..Just désormais supprimé ma source de données un créé un nouveau ... Maintenant, je mets un point de rupture sur DataContext Line ... et checnked si sa nulle ou pas .. et sa null .. LINQ_TESTDATACONTEXT DB = Nouveau LINQ_TESTDATACONTEXT (); DB est null ... où je fais mal
Maintenant, j'ai des données jusqu'à ce que cette ligne ... J'ai vérifié avec la pause, il a aussi que sur ce sujet .. Supprimer a cette ligne que je veux supprimer ... mais toujours aucune modification de la base de données. db.logins.daleteallonsubmit (supprimer); Après cette ligne, je fais cela. db.submitchanges ();
Vous manquez de perdre une boucle pour supprimer toutes les entités.
Utilisez comme ci-dessous p>
try
{
db.SubmitChanges();
}
catch (Exception e)
{
// Provide for exceptions.
}
pour de bonnes pratiques em> strud>
Essayez d'utiliser la méthode d'abord (), quelque chose comme ceci:
var remove =
(from aremove in db.logins where aremove.username == userNameString
&& aremove.Password == pwdString select aremove).first();
db.logins.DeleteOnSubmit(remove);
Utilisez ce code son travail
var remove = (from aremove in db.logins
where aremove.username == userNameString
&& aremove.Password == pwdString
select aremove).FirstOrDefault();
if(remove != null)
{
db.logins.Remove(remove);
db.SaveChanges();
}