2010-04-15 5 views
2

J'ai un problème très étrange. Lorsque j'exécute une procédure stockée de base de données spécifique à partir de C# à l'aide de SqlCommand.ExecuteNonQuery, ma procédure stockée n'est jamais exécutée.Database.ExecuteNonQuery ne renvoie pas

En outre, SQL Profiler n'enregistre pas la commande du tout. Je ne reçois pas de délai d'attente de commande et aucune exécution n'est lancée. Le plus étrange, c'est que ce code a bien fonctionné plus de 1 200 000 fois, mais pour ce fichier particulier que j'introduis dans la base de données, il reste bloqué pour toujours.

Lorsque je tue l'application, je reçois cette erreur dans le journal des événements du serveur de base de données: "A fatal error occurued while reading the input stream from the network. The session will be terminated (input error: 64, output error: 0). Ce qui me fait penser que le serveur de base de données reçoit la commande, bien que SQL Profiler l'indique autrement.

Je sais que les autorisations appropriées sont définies et que la chaîne de connexion est correcte car ce morceau de code et cette procédure stockée fonctionnent correctement avec d'autres fichiers. Ci-dessous le code qui appelle la procédure stockée, il peut être important de noter que le fichier que j'essaie d'insérer est de 33,5 Mo, mais j'ai ajouté plus de 10 000 fichiers de plus de 500 Mo, donc je ne pense pas que le la taille est la question:

using (SqlConnection sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["TheDatabase"].ConnectionString)) 
using (SqlCommand command = sqlconn.CreateCommand()) 
{ 
    command.CommandText = "Add_File"; 
    command.CommandType = CommandType.StoredProcedure; 
    command.CommandTimeout = 30 //should timeout in 30 seconds, but doesn't... 
    command.Parameters.AddWithValue("@ID", ID).SqlDbType = SqlDbType.BigInt; 
    command.Parameters.AddWithValue("@BinaryData", byteArr).SqlDbType = SqlDbType.VarBinary; 
    command.Parameters.AddWithValue("@FileName", fileName).SqlDbType = SqlDbType.VarChar; 
    sqlconn.Open(); 
    command.ExecuteNonQuery(); 
} 

Il n'y a pas de pare-feu entre le serveur de faire l'appel et le serveur de base de données, et les pare-feu Windows ont été désactivées pour résoudre ce problème.

+0

Avez-vous essayé de lancer directement le proc stocké avec les mêmes entrées et voir si cela fonctionne là-bas? – Ocelot20

Répondre

0

Je l'ai vu une fois avant lors du téléchargement XML via un proc stocké à partir d'un poste de travail uniquement

Nous avons changé le câble réseau (qui routé différemment dans notre grand bâtiment) et cela a fonctionné.

Bizarre que cela puisse paraître, vous pouvez en quelque sorte à nouveau monter les câbles du serveur ou modifier ou contourner un commutateur, etc.

Questions connexes