Erreur lorsque vous essayez d'appeler la méthode Prepare avant d'ajouter des paramètres: « une exception non gérée du type 'System.Data.SqlClient.SqlException' s'est produite dans system.data.dll »

Traductions disponibles Traductions disponibles
Numéro d'article: 310368 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Pour une version de Visual C# .NET de cet article, voir 311348.

Cet article fait référence à l'espaces de noms bibliothèque de classes Microsoft .NET Framework suivants :
  • System.Data.OLEDB
  • System.Data.SqlClient
Agrandir tout | Réduire tout

Sommaire

Symptômes

Lorsque vous créez une commande paramétrée par rapport à Microsoft SQL Server 7.0, si vous appelez la méthode Prepare avant d'ajouter des paramètres à la commande, vous s'afficher le message d'erreur suivantes :
Une exception non gérée du type « System.Data.SqlClient.SqlException » s'est produite dans system.data.dll.
Des informations supplémentaires : erreur système.
Ce problème ne se produit pas dans SQL Server 2000.

Cause

Ce problème se produit dans SQL Server 7.0 car, par sa conception, il ne peut pas exécuter la méthode préparer avant d'ajouter des paramètres. Cela s'applique à la plupart des systèmes de base de données.

SQL Server 2000 ne génère pas l'exception précitée, car il ne s'exécute pas terminer jusqu'à ce que la première commande est exécutée. Cette optimisation empêche la surcharge de Préparation si aucune commande n'est exécutée par la suite.

Résolution

Pour résoudre ce problème, n'appelez pas la méthode préparer jusqu'à ce qu'après avoir ajouté les paramètres.

Plus d'informations

Procédure pour reproduire le comportement

Le code exemple suivant utilise la table zone de la Northwind exemple de base de données.
  1. Démarrez Microsoft Visual Studio .NET.
  2. Créez un nouveau projet d'application de Windows de Visual Basic. Form1 est ajouté au projet par défaut.
  3. Vérifiez que que votre projet contient une référence à l'espace de noms System.Data et ajoutez une référence à cet espace de noms si ce n'est pas le cas.
  4. Placez un contrôle de bouton sur Form1. Modifier la propriété Name du bouton à btnTest et modifiez la propriété à test .
  5. Utilisez l'instruction Imports sur les espaces de noms System , System.Data.OLEDB et System.Data.SqlClient afin qu'il ne soit pas nécessaire de qualifier les déclarations dans les espaces de noms plus loin dans votre code. Ajoutez le code suivant à la section « Déclarations générales » de Form1 :
    Imports System
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    					
  6. Ajoutez le code suivant à la fenêtre code après la zone « Windows Form Designer généré code ».

    note <username>Vous devez modifier <nom_utilisateur> ID d'utilisateur et mot de passe = < mot de passe fort > pour les valeurs correctes avant d'exécuter ce code. Assurez-vous que code utilisateur possède les autorisations appropriées effectuer cette opération sur la base de données.
        Private Sub btnTest_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnTest.Click
            Dim myConnString As String = _
                "User ID=<username>;password=<strong password>;Initial Catalog=Northwind;Data Source=myServer"
            Dim id As Integer = 25
            Dim desc As String = "myFirstRegion"
            Dim rConn As SqlConnection = New SqlConnection(myConnString)
            rConn.Open()
            Dim command As SqlCommand = New SqlCommand("", rConn)
            command.CommandText = "insert into Region (RegionID, RegionDescription)" & _
                                  "values (@id, @desc)"
    
            'SQL Server 7.0 throws an exception here.
            'Comment the following line to resolve this problem against SQL Server 7.0.
            command.Prepare()
    
            command.Parameters.Add("@id", SqlDbType.Int, 4)
            command.Parameters.Add("@desc", SqlDbType.Char, 50)
            'You can call Prepare after you set up CommandText and parameters.
            command.Prepare() 
    
            command.Parameters(0).Value = id
            command.Parameters(1).Value = desc
            command.ExecuteNonQuery()
            MessageBox.Show("Updated Successfully")
        End Sub
    					
  7. Modifiez la chaîne de connexion ( myConnString ) en fonction de votre environnement.
  8. Enregistrer votre projet. Dans le menu Déboguer , cliquez sur Démarrer pour exécuter votre projet.
  9. Cliquez sur test . Si vous êtes connecté à une base de données SQL Server 7.0, le code génère l'exception ci-dessus.

    Si vous êtes connecté à une base de données SQL Server 2000, le code s'exécute correctement, et la boîte de message « mise à jour correctement » s'affiche.
  10. Pour résoudre ce problème par rapport à SQL Server 7.0, commentaires l'appel de command.Prepare qui précède le code pour ajouter les paramètres et puis exécutez à nouveau le projet.

Références

Pour plus d'informations sur les objets ADO.NET et la syntaxe, consulter le suivant Microsoft .NET Framework Software Development Kit (SDK) documentation :
Accès aux données avec ADO.NET
http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx

Propriétés

Numéro d'article: 310368 - Dernière mise à jour: lundi 24 février 2014 - Version: 2.8
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Visual Basic .NET 2002 Initiation
  • Microsoft Visual Basic .NET 2003 Initiation
  • Microsoft Visual Basic 2005
  • Microsoft SQL Server 7.0 Standard
Mots-clés : 
kbnosurvey kbarchive kbmt kbtshoot kberrmsg kbnofix kbprb kbsqlclient kbsystemdata KB310368 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 310368
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com