2009-03-21 6 views
0

" SelectCommand =" SELECT EmployeeID, FirstName, LastName, Titre, Ville FROM Employés WHERE ville = @ City "> Ado.net transmettra-t-il à une procédure stockée uniquement la valeur ou le type?

A) Je suppose que lorsque vous ne spécifiez pas de quel type de paramètre instance "Ville" est, il est automatiquement de type Objet, ce qui signifie que peut ensuite être affectée valeur de tout type.Si si "Ville" est plus tard (par exemple à l'intérieur SqlDataSource2_Selecting() gestionnaire d'événements) affecté une valeur de mauvais type, cette mauvaise affectation ne sera détectée que sur Sql s erver, et pas avant (bien sûr, le serveur Sql rapportera cette erreur au serveur web)?

B) Si nous créons une instance SqlParameter de type NVarChar (20) et que vous voulez passer ce paramètre à une procédure stockée, va ADO.NET passer à une procédure stockée juste la valeur de ce paramètre, ou va-t-il aussi informer la procédure du type exact de ce paramètre ( est NVarChar (20))?

Thanx

Répondre

1

Le type de données où la valeur du paramètre est stocké est toujours object. Si vous ne spécifiez pas le type, le pilote devinera le type de données de la base de données en fonction du type de données de la valeur qui lui est affectée. Il est donc plus sûr de spécifier le type souhaité.

Le type de données (NVarChar) peut être transmis à la base de données, ce dont je ne suis pas sûr, mais la longueur ne l'est pas. La longueur spécifiée limite uniquement les données qui sont envoyées à la base de données, elle ne doit pas nécessairement correspondre à la longueur spécifiée dans la procédure stockée (mais elle devrait normalement l'être). Si vous utilisez une longueur supérieure à celle spécifiée dans la procédure stockée, le pilote peut autoriser l'envoi d'une valeur trop longue pour que la procédure stockée accepte. Peu importe si le type de données est envoyé à la base de données ou non, il est utilisé pour envoyer la valeur de la manière correcte.

+0

Oublié de demander ceci - quand Ado.Net renvoie des valeurs de paramètre à la base de données, comment ces paramètres sont-ils représentés en interne? Ce qui signifie qu'Ado.Net donne le paramètre Int32, avant de l'envoyer au serveur sql, représentation du même bit que cette valeur aurait sur le serveur Sql? – SourceC

1

Les paramètres sont définis par SQL Server et je suis à peu près certain que le type spécifié par le paramètre n'est pas transmis avec les données lorsque ADO communique réellement avec le serveur. Alors oui, il est tout à fait possible de spécifier le mauvais type de données et vous ne saurez pas jusqu'à ce que SQL Server renvoie une erreur.

De même pour B ... seules les données sont envoyées.

+0

merci à tous pour votre aide – SourceC

3

Non, le serveur SQL ne sera pas informé du type du paramètre dans un appel de procédure stockée. Si vous passez un paramètre, il essaiera de le convertir au type correct et de se plaindre s'il ne peut pas faire la conversion.

Questions connexes