2010-04-20 6 views
5

Je suis à la fin de ma connaissance et googlé pour la réponse aussi, mais pas de chance:/a échoué à convertir la valeur du paramètre d'un Guid à une chaîne

il y a semaine tout a bien fonctionné.

J'ai fait un retour sur le dépôt, recréé le tableadapter etc ... rien n'a aidé.

Lorsque je tente de sauver dans ma demande, je reçois un SystemInvalidCastException à ce moment:

PersonListDataSet.cs:

partial class P_GroupTableAdapter 
{ 
    public int Update(PersonListDataSet.P_GroupDataTable dataTable, string userId) 
    { 
     this.Adapter.InsertCommand.Parameters["@userId"].Value = userId; 
     this.Adapter.DeleteCommand.Parameters["@userId"].Value = userId; 
     this.Adapter.UpdateCommand.Parameters["@userId"].Value = userId; 

     return this.Update(dataTable); **<-- Exception occurs here** 
    } 
} 

Tout est coincé ici parce qu'un Guid - et j'ai vérifié l'aperçu datatable avec l'outil loupe est vraiment un vrai Guid dans la colonne du datatable - ne peut pas être converti en une chaîne ??? Comment cela peut-il arriver?

+0

S'il vous plaît nous montrer votre SQL. – SLaks

+0

Veuillez nous montrer l'exception et la trace de pile, et nous montrer la valeur de userID que vous passez à la méthode. –

+1

Est-ce que @userId est censé être un Guid? Ensuite, '[" @userId "]. Value' devrait être assigné avec la valeur Guid plutôt qu'avec String. – Regent

Répondre

6

C'est l'inverse. Votre userId est une chaîne et vous avez besoin d'une valeur GUID pour vos paramètres:

Parameters["@userId"].Value = new Guid(userId); 

UserId est fourni dans l'un des formats pris en charge pour un GUID. Le constructeur supports many formats.

Modifier, en fonction des commentaires ci-dessous:

Il se avère que vous demandez comment exécuter une instruction select comme:

SELECT .... 
WHERE '{BB6DFF45-FDA7-4155-86D0-0CBF129A9104}' = `domainname\\jondoe` 

Je pense que vous devriez vérifier à nouveau votre modèle de données et trouver une solution .

+0

userId est varchar ici non Guid. – Elisabeth

+0

@ user320460: C'est exactement pourquoi vous devez le convertir en un Guid. Les paramètres sont des Guids, non? –

+0

À la deuxième réflexion, mieux nous montrer un exemple de valeur de userId. –

2

Avez-vous essayé:

this.Adapter.InsertCommand.Parameters["@userId"].Value = new Guid(userId); 
this.Adapter.DeleteCommand.Parameters["@userId"].Value = new Guid(userId); 
this.Adapter.UpdateCommand.Parameters["@userId"].Value = new Guid(userId); 

it helps !!!

Questions connexes