0

Je continue d'obtenir cette erreur en essayant d'exécuter ce code, même après avoir placé un CType autour de la valeur et en le définissant comme double?Conversion de la chaîne "" en type 'Double n'est pas valide

Private Sub GridView1_RowDeleting(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting 
    ' The deletion of the individual row is automatically handled by the GridView. 
    Dim dbDelete As New pbu_housingEntities 
    ' Remove individual from the bed. 
    Dim occupant As String = GridView1.Rows(e.RowIndex).Cells(2).Text 
    Dim room As String = GridView1.Rows(e.RowIndex).Cells(5).Text 
    Dim building As String = GridView1.Rows(e.RowIndex).Cells(4).Text 
    Dim find_id = From p In dbDelete.Residents _ 
        Where p.person_name = occupant _ 
        Select p 


    Dim remove_bed = From p In dbDelete.Beds _ 
        Where p.occupant = find_id.FirstOrDefault.id _ 
        Where p.room = room _ 
        Where p.building = building _ 
        Order By p.id Descending _ 
        Select p 
    remove_bed.First.occupant = CType(0, Double) 
    dbDelete.SaveChanges() 

    ' Increase number of open spaces in room. 
    Dim update_occupancy = From p In dbDelete.Rooms _ 
          Where p.room1 = room 
          Where p.building = building _ 
          Select p 

    update_occupancy.First.current_occupancy = update_occupancy.First.current_occupancy - 1 
    dbDelete.SaveChanges() 

End Sub 
+2

Quelle ligne lance? – JaredPar

+2

Etes-vous sûr que la ligne CType est où l'erreur est? Vous ne vérifiez même pas si find_id a une valeur avant de l'utiliser dans l'instruction LINQ suivante. Cela pourrait être un problème. –

Répondre

1

Je soupçonne que le problème est dans cette ligne:

Where p.occupant = find_id.FirstOrDefault.id _ 

Est-ce que ces deux du même type ? La raison pour laquelle je suspecte cette ligne est parce que dans une autre table plus tôt, vous utilisez occupant comme nom de la personne. Je vérifierais que les autres valeurs de vos clauses where correspondent également aux types auxquels vous les comparez.

La raison pour laquelle il peut sembler que l'erreur se trouve dans la ligne d'affectation est que la requête n'est pas exécutée tant que vous n'avez pas exécuté First dessus. L'erreur est plus probable dans la requête, pas dans l'affectation.

+0

c'est ce que j'ai dit dans ses commentaires il y a 11 minutes ... –

+0

@Scott - il obtiendrait une exception NullReference si FirstOrDefault renvoyait une valeur nulle. 'find_id' est garanti non-null mais il peut s'agir d'une collection vide. Je pense juste que le type de 'id' est différent de' occupant'. Il y a peut-être une erreur qui attend de se produire, mais je ne pense pas que cette erreur se produise dans ce cas. Pour info, je n'ai pas vu votre commentaire avant d'avoir écrit ma réponse. – tvanfosson

+0

pas de soucis! C'est certainement cette ligne où le problème réside –

0

Il ne peut pas convertir une chaîne vide en double. Mettez dans une instruction if pour vérifier une chaîne vide et si elle est vide puis réglez la double à 0.

Questions connexes