Vérification du 3ème caractère avec Char.IsNumber dans vb.net

Je suis à la search d'une database et en tire des résultats. Avant de l'afficher dans WPF je vérifie le contenu du text dans un champ appelé PrimarySponsor qui peut être (1) numéro vide / nul (2) au 3ème caractère (3) nom des personnes. J'utilise actuellement Char.IsNumber pour vérifier l'option 2 s'il y a un nombre à la position 4.

If reader("PrimarySponsor") Is DBNull.Value Then resultxPrimSpon = "" ElseIf Char.IsNumber(reader("PrimarySponsor"), 3) Then resultxPrimSpon = "Terminated" Else resultxPrimSpon = reader("PrimarySponsor") End If 

Avant de mettre l'logging Char.IsNumber, j'obtenais 4 résultats affichés. Quand j'ajoute le code Char.IsNumber, je n'ai que 2 résultats avec l'erreur;

Erreur lors de la connection à l'argument SQLServer.Sepcified était hors de la plage de valeurs valides. Nom du paramètre: index.

Quelqu'un a-t-il des idées sur les raisons de cette situation ou sur la façon de contourner ce problème?

Il n'est pas clair où vous obtenez cette erreur car Char.IsNumber n'est pas une méthode sql-server. Donc je suppose que c'est un message personnalisé de votre part. Cependant, l' argument spécifié était hors de scope est documenté :

ArgumentOutOfRangeException : l'index est inférieur à zéro ou supérieur à la dernière position de s.

Il semble donc qu'au less une des strings soit plus courte que 4 caractères. En général, vous devriez stocker les valeurs du lecteur dans une variable du type correct si vous devez y accéder plus d'une fois. Dans ce cas, dans une variable Ssortingng .

Mais c'est aussi une bonne idée de créer un type personnalisé qui a toutes les propriétés. Ensuite, vous pouvez append tout à une List(Of T) . Voici un exemple:

 Public Class Sponsor Public Property PrimarySponsor As Ssortingng End Class 

Bien sûr, vous pouvez également remplir une List(Of Ssortingng) au lieu d'une List(Of Sponsor) . Ensuite, vous n'avez pas besoin de créer un nouveau type. Mais je suppose que vous avez plus d'une colonne dans la table. L'utilisation d'un type personnalisé augmente considérablement la lisibilité et la maintenabilité.

….

 Dim allSponsors As New List(Of Sponsor) Using reader = command.ExecuteReader() If reader.HasRows Then Dim primSponsorColumnIndex = reader.GetOrdinal("PrimarySponsor") While reader.Read Dim sponsor As New Sponsor() If reader.IsDBNull(primSponsorColumnIndex) Then sponsor.PrimarySponsor = "" Else sponsor.PrimarySponsor = reader.GetSsortingng(primSponsorColumnIndex) If sponsor.PrimarySponsor.Length >= 4 AndAlso _ Char.IsDigit(sponsor.PrimarySponsor(3)) Then sponsor.PrimarySponsor = "Terminated" End If End If allSponsors.Add(sponsor) End While End If End Using 

Utilisez d'abord DataReader.IsDBNull pour vérifier si la valeur est Null . Ensuite, vérifiez si Length >= 4 avant d'utiliser Char.IsDigit(sponsor.PrimarySponsor(3)) pour éviter l' ArgumentOutOfRangeException .

Différence entre Char.IsDigit () et Char.IsNumber () en C #