ExecuteReader : la propriété Connection n'a pas été initialisée.

ExecuteReader : la propriété Connection n'a pas été initialisée. - C#/.NET managed - Programmation

Marsh Posté le 23-06-2015 à 17:02:14    

Bonjour bonjour !
J'ai un gros probleme sur mon application C# :
 

Code :
  1. //
  2.         protected void boutonUpload_Click(object sender, EventArgs e)
  3.         {
  4.             //recuperation des informations de l'interface graphique
  5.             string fichier = this.pdfUpload.FileName;
  6.             //la connection, mdp à changer
  7.             string connexionString = "Data Source=(mon pc)\\SQLEXPRESS;" +
  8.                                       "Initial Catalog=BDD;" +
  9.                                       "User id=sa;" +
  10.                                       "Password=(mon mdp);";
  11.             SqlConnection connection = new SqlConnection(connexionString);
  12.             connection.Open();
  13.             SqlCommand cmd = new SqlCommand( connexionString );
  14.             cmd.CommandType = CommandType.StoredProcedure;
  15.             cmd.Parameters.Add(new SqlParameter("@Clé primaire", 1));
  16.             cmd.Parameters.Add(new SqlParameter("@Champ", "azertyuio" ));
  17.             cmd.Parameters.Add(new SqlParameter("@Fichier", fichier));
  18.            
  19.             // on envoie la commande au serveur
  20.             cmd.ExecuteReader();
  21.            
  22.             connection.Close();
  23.         }


 
Il execute très bien jusqu'à "cmd.ExecuteReader();", et paf :
 

Une exception de type 'System.InvalidOperationException' s'est produite dans System.Data.dll mais n'a pas été gérée dans le code utilisateur
 
Informations supplémentaires : ExecuteReader : la propriété Connection n'a pas été initialisée.


 
Merci  d'avance de toute aide !
 

Reply

Marsh Posté le 23-06-2015 à 17:02:14   

Reply

Marsh Posté le 23-06-2015 à 17:05:36    

Je suggère de commencer par lire le message d'erreur, et te demander ce que tu pourrais bien faire de l'objet Connection que tu crées justement au dessus sans rien en faire :p.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 23-06-2015 à 17:09:43    

Et aussi, le constructeur de SqlCommand n'a jamais pris et ne prendra jamais en paramètre une connectionString [:spamafote].

 

Allez, pour être sympa, essaie un truc de ce genre :

Code :
  1. //recuperation des informations de l'interface graphique
  2.             string fichier = this.pdfUpload.FileName;
  3.             //la connection, mdp à changer
  4.             string connexionString = "Data Source=(mon pc)\\SQLEXPRESS;" +
  5.                                       "Initial Catalog=BDD;" +
  6.                                       "User id=sa;" +
  7.                                       "Password=(mon mdp);";
  8.             SqlConnection connection = new SqlConnection(connexionString);
  9.             connection.Open();
  10.             SqlCommand cmd = new SqlCommand( "Le nom de ta procédure stockée que tu as du oublier en route !!", connection);
  11.             cmd.CommandType = CommandType.StoredProcedure;
  12.             cmd.Parameters.Add(new SqlParameter("@Clé primaire", 1));
  13.             cmd.Parameters.Add(new SqlParameter("@Champ", "azertyuio" ));
  14.             cmd.Parameters.Add(new SqlParameter("@Fichier", fichier));
  15.          
  16.             // on envoie la commande au serveur
  17.             cmd.ExecuteReader(); // Faut faire un truc avec ça, ou alors c'est pas un reader que tu voulais...
  18.          
  19.             connection.Close();


Message édité par TotalRecall le 23-06-2015 à 17:10:50

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 24-06-2015 à 09:33:00    

Merci ! En effet, ca marche un poil mieux : je debute à peine en SQL, et je me melange les pinceaux sur les commandes
Je suis passé à :
 

Code :
  1. SqlCommand cmd = new SqlCommand();
  2.             cmd.Connection = connection;
  3.             string commandText = "INSERT INTO Table VALUES(@Clé primaire, @Champ, ";
  4.             commandText = commandText + "@Fichier)";
  5.             cmd.CommandText = commandText;
  6.             cmd.CommandType = CommandType.Text;
  7.          
  8.             int cle=1;
  9.             string champRenseignement = "azertyuio";
  10.             cmd.Parameters.Add(new SqlParameter("@Clé primaire", cle));
  11.             cmd.Parameters.Add(new SqlParameter("@Champ", champRenseignement));
  12.             cmd.Parameters.Add(new SqlParameter("@Fichier", fichier));
  13.            
  14.             // on envoie la commande au serveur
  15.             cmd.ExecuteNonQuery();


 
Et ca a l'air de mieux lui convenir, meme s'il me met "Informations supplémentaires : Syntaxe incorrecte vers 'int'."
 
Je me suis dis que ca venait peut-etre de ma table, mais elle est bien de la forme  
[Clé primaire] int  
Champ nvarchar(50)  
Fichier varchar(MAX)  
 
Je vais, je pense, reprendre la SQL depuis le debut, à savoir récupérer des informations de la table et ,on en envoyer =)

Reply

Marsh Posté le 24-06-2015 à 09:39:51    

Je ne sais pas si c'est la cause (le message d'erreur ne correspond pas trop et tu ne précises pas comment tu l'obtiens), mais en tout cas, ton champ "Clé primaire" avec l'espace et la lettre accentué c'est pas terrible, tant pour la lecture que la fiabilité du code.
Un truc genre "ClePrimaire" serait mieux (sachant qu'il y a aussi des normes conseillées pour identifier les PK, FK etc).
 


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 24-06-2015 à 15:41:04    

Ca marche et j'arrive meme à afficher les noms dans un tableau :
 

Code :
  1. protected void boutonUpload_Click(object sender, EventArgs e)
  2.         {
  3.             if (pdfUpload.HasFiles)
  4.                 foreach (var file in pdfUpload.PostedFiles)
  5.                 {
  6.                     // TODO faire multiples fichiers  
  7.                     string nomFichier = pdfUpload.FileName;
  8.                     Stream fichier = pdfUpload.FileContent;
  9.                     // TODO enlever du Hard code
  10.                     //la connection, mdp à changer
  11.                     string connexionString = "Data Source=*****\\SQLEXPRESS;" +
  12.                                               "Initial Catalog=filestream_database;" +
  13.                                               "User id=sa;" +
  14.                                               "Password=*****;";
  15.                     SqlConnection connection = new SqlConnection(connexionString);
  16.                     connection.Open();
  17.                     //  La commande qu'on passe au SQL :
  18.                     SqlCommand cmd = new SqlCommand();
  19.                     cmd.Connection = connection;
  20.                     string commandText = "INSERT INTO dbo.TableFullstream VALUES (@ID, @ChampRenseignement, @Doc)";
  21.                     cmd.CommandText = commandText;
  22.                     cmd.CommandType = CommandType.Text;
  23.                     cmd.Parameters.Add(new SqlParameter("@ID", Guid.NewGuid()));
  24.                     cmd.Parameters.Add(new SqlParameter("@ChampRenseignement", nomFichier));
  25.                     cmd.Parameters.Add(new SqlParameter("@Doc", fichier));
  26.                     // on envoie la commande au serveur
  27.                     cmd.ExecuteNonQuery();
  28.                     connection.Close();
  29.                 }
  30.             updateTableFichiers();
  31.         }


 
 
Me reste plus qu'à lire les fichiers en question, et c'est la partie dure =)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed