"Μη έγκυρα ληφθέντα Buffer από το πρόγραμμα-πελάτης ” μήνυμα λάθους στο αρχείο καταγραφής του διακομιστή SQL κατά τη χρήση του SQL Server .NET κλάσεις υπηρεσιών παροχής

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 827366 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Συμπτώματα

Όταν χρησιμοποιείτε ένα Microsoft .NET FrameworkSqlClientη κλάση, λαμβάνετε το ακόλουθο μήνυμα λάθους στο αρχείο καταγραφής σφαλμάτων του Microsoft SQL Server 2000:
Σφάλμα: 17805, σοβαρότητα: 20, κατάσταση: 3
Μη έγκυρο buffer που λαμβάνονται από τον υπολογιστή-πελάτη.
Λαμβάνετε τα ακόλουθα μηνύματα λάθους που αντίστοιχα στην εφαρμογή προγράμματος-πελάτη Microsoft .NET Framework:
System.Data.SqlClient.SqlException: Παρουσιάστηκε ένα σοβαρό σφάλμα στην τρέχουσα εντολή. The results, if any, should be discarded

Αιτία

Αυτή η συμπεριφορά παρουσιάζεται, εάν ισχύει ένα από τα ακόλουθα σενάρια:
  • Μπορείτε να χρησιμοποιήσετε έναSqlClientκλάσης σε μιαΟριστικοποίησηη μέθοδος ή σε έναC#καταστροφέα.
  • Μην καθορίζετε μια ρητήSQLDbTypeΑπαρίθμηση κατά τη δημιουργία ενόςSqlParameterObject. Όταν δεν καθορίζετε μια ρητήSQLDbTypeΑπαρίθμηση, Παροχέας δεδομένων Microsoft .NET Framework για SQL Server (SqlClient) προσπαθεί να επιλέξτε το σωστόSQLDbTypeΑπαρίθμηση με βάση τα δεδομένα που διαβιβάζονται. SqlClient δεν είναι επιτυχής.
  • Δηλώνετε μια παρουσία τουSqlClientη κλάση είναιστατικόσε C# ή να είναικοινή χρήσηστη Visual Basic. Η περίοδος λειτουργίας μπορεί να προσπελαστεί ταυτόχρονα από περισσότερα από ένα νήμα της εφαρμογής.

    ΣΗΜΕΙΩΣΗΣτο περιβάλλον του ASP.NET ή σε άλλα περιβάλλοντα, ταυτόχρονη πρόσβαση είναι δυνατή ακόμα και αν δεν υπάρχουν πρόσθετες νήματα δημιουργούνται ρητά στον κώδικα της εφαρμογής.
  • Το μέγεθος της παραμέτρου που μπορείτε να καθορίσετε ρητά στον κώδικα του .NET Framework είναι μεγαλύτερο από το μέγιστο μέγεθος που μπορείτε να χρησιμοποιήσετε για τον τύπο δεδομένων του SQL Server.

    Για παράδειγμα, σύμφωνα με SQL Server Books Online,nvarcharείναι μεταβλητού μήκους δεδομένων χαρακτήρων Unicode n χαρακτήρες. "n" πρέπει να είναι μια τιμή από 1 έως 4000. Εάν καθορίσετε ένα μέγεθος που είναι περισσότερα από 4000 για έναnvarcharη παράμετρος, λαμβάνετε το μήνυμα λάθους που περιγράφεται στην ενότητα "Συμπτώματα".
Ο ακόλουθος κώδικας δείχνει επίσης πώς τα σφάλματα αυτά ενδέχεται να προκύψουν:
Stored Procedure
--------------------------

CREATE PROCEDURE spParameterBug @myText Text AS
            Insert Into ParameterBugTable (TextField) Values (@myText)

Code
-------
static void Main(string[] args)
{
       string dummyText=string.Empty;
       for (int n=0; n < /*80*/ 3277; n++)   // change this to 80 to receive the second error that is mentioned earlier in this article.
       {
             dummyText += "0123456789";
       }

        // TO DO: Change data source to match your SQL Server:

       SqlConnection con= new SqlConnection("data source=myserver;Initial Catalog=mydb;Integrated Security=SSPI;persist security info=True;packet size=16384");
       SqlCommand cmd = new SqlCommand("SpParameterBug", con);
      con.Open();
           // Causes error 17805:
      SqlParameter param2 =new SqlParameter("@myText", dummyText);
      cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.Add(param2);
      try
      {
          cmd.ExecuteNonQuery();
      } 
      catch (Exception err)
      {
         Console.WriteLine(err.ToString());
      }

      Console.ReadLine();

}

Προτεινόμενη αντιμετώπιση

Για να επιλύσετε αυτά τα σφάλματα, βεβαιωθείτε ότι κάνετε τα εξής:
  • Μην χρησιμοποιείτε έναSqlClientκλάσης σε μιαΟριστικοποίησηη μέθοδος ή σε έναC#καταστροφέα.
  • Καθορίστε τοSqlDbTypeΑπαρίθμηση για τοSqlParameterτο αντικείμενο ώστε να μην υπάρχει καμία inferred τύπου.
  • Για να καθορίσετε ένα μέγεθος της παραμέτρου που βρίσκεται εντός των ορίων του τύπου δεδομένων.

Αναφορές

Για περισσότερες πληροφορίες σχετικά με το μέγιστο μέγεθος για διαφορετικούς τύπους δεδομένων, επισκεφθείτε τις ακόλουθες τοποθεσίες της Microsoft Developer Network (MSDN) στο Web:
.aspx http://msdn2.Microsoft.com/en-us/library/aa276823 (SQL.80)
.aspx http://msdn2.Microsoft.com/en-us/library/aa258271 (SQL.80)

Ιδιότητες

Αναγν. άρθρου: 827366 - Τελευταία αναθεώρηση: Τετάρτη, 22 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft .NET Framework 1.0
Λέξεις-κλειδιά: 
kbprb kbmt KB827366 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:827366

Αποστολή σχολίων

 

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