none
problem de la base de donnée sql server (insertion des données) RRS feed

  • Question


  • j'ai crée une méthode qui fait insérer des profiles  des user dans la table "C2RP.dbo.profile" mais j'ai rien trouvé dans la base de donnée je vou montre le code et svp aidez moi à la rectifier :


    private void inserer(object sender,routedEventArgs e)
    {
       string chemin="textBox2";
       string nom;
       string prenom;
       string actif;

    DataTable m_Datatable=new DataTable();
    sqlConnection pConnection  = new sqlConnection();
    sqlDataAdapter adapter = new sqlDataAdapter();
    pConnection.open();


      using (FileStream fs = File.OpenRead("c:\\chemin.csv"))

    {

      using (StreamReader sr = new StreamReader(fs))

      {

        while (!sr.EndOfStream)

        {

          string[] values = sr.ReadLine().Split(';');

                nom = values[2];

                prenom = values[7];

                actif= values[11];
                
         // construction de la requête 

        string QueryString = "Insert into C2RP.dbo.profile (pr_actif,pr_nom,pr_prenom) VALUES (actif,nom,prenom)";

       //Exécution de la requête 
        
                    SqlCommand command = new SqlCommand(QueryString, pConnection);
                    command.CommandTimeout = 0;
                    adapter.SelectCommand = command;
                    adapter.Fill(m_DataTable);

                    //Fermeture de la connection

                    pConnection.Close();

            }
         }
       }
    }
          

    jeudi 7 mai 2009 12:48

Réponses

  • Bonjour,
    Lors de la création de votre SqlConnection vous devez fournir au constructeur une chaine de connexion.

    En espérant avoir pu vous aider.

    Guillaume
    • Marqué comme réponse mimo85 mardi 12 mai 2009 15:21
    mardi 12 mai 2009 13:15

Toutes les réponses

  • Je n'ai pas accès à Visual Studio, mais je vois que tu définis ta commande SQL, mais jamais tu ne l'exécute. Je me souviens pas de la syntaxe, mais il n'y aurait pas un command.Execute()?
    Microsoft MVP C# :: mongeon.devrpm.ca
    jeudi 7 mai 2009 12:52
    Modérateur
  • Bonjour a tous,

    Biche ça ne serait il pas "SqlCommand. ExecuteNonQuery" ?
    (
    Exécute une instruction Transact-SQL sur la connexion et retourne le nombre de lignes affectées)

    Je connais pas encore tres bien SQL et tout ses mystère :)


    A bientot

    Cordialement, Troxsa
    jeudi 7 mai 2009 13:02
  • Bonjour,
    Il y a 2 problèmes dans votre approche :
    • Vous ne remplissez pas votre DataTable m_DataTable avec vos données.
    • Vous avez affecté votre commande INSERT à la propriété SelectCommand et non InsertCommand de votre DataAdapter.
    Voila une correction de votre code :

    private void inserer(object sender,routedEventArgs e)
    {
      // création de la DataTable et de sa structure
      DataTable m_DataTable=new DataTable();
      m_DataTable.Columns.Add("nom", typeof(string));
      m_DataTable.Columns.Add("prenom", typeof(string));
      m_DataTable.Columns.Add("actif", typeof(bool));
    
      // lecture du fichier et insertion dans la DataTable
      using (FileStream fs = File.OpenRead("c:\\chemin.csv"))
      {
        using (StreamReader sr = new StreamReader(fs))
        {
          while (!sr.EndOfStream)
          {
            string[] values = sr.ReadLine().Split(';');
            m_DataTable.Add(new object[] {values[2], values[7], values[11]});
          }
        }
      }
    
      // écriture en base
      using (sqlConnection pConnection  = new sqlConnection())
      {
        string QueryString = "Insert into C2RP.dbo.profile (pr_actif,pr_nom,pr_prenom) VALUES (actif,nom,prenom)";
        using (SqlCommand command = new SqlCommand(QueryString, pConnection))
        {
          using (SqlDataAdapter adapter = new SqlDataAdapter())
          {
            pConnection.Open();
    adapter.InsertCommand = command;
            adapter.Update(m_DataTable);
          }
        }
      }
    }

    Si vous ne voulez pas passer par une DataTable et un DataAdapter vous pouvez exécuter vos requète directement à chaque lecture de ligne :

    private void inserer(object sender,routedEventArgs e)
    {
      // lecture du fichier et insertion
      using (sqlConnection pConnection  = new sqlConnection())
      {
        pConnection.Open();
        string QueryString = "Insert into C2RP.dbo.profile (pr_actif,pr_nom,pr_prenom) VALUES (@actif,@nom,@prenom)";
    
        using (SqlCommand command = new SqlCommand(QueryString, pConnection))
        {
          cmd.Parameters.Add("nom", SqlDbType.NVarChar);
          cmd.Parameters.Add("prenom", SqlDbType.NVarChar);
          cmd.Parameters.Add("actif", SqlDbType.Bit);
    
          using (FileStream fs = File.OpenRead("c:\\chemin.csv"))
          {
            using (StreamReader sr = new StreamReader(fs))
            {
              while (!sr.EndOfStream)
              {
                string[] values = sr.ReadLine().Split(';');
                cmd.Parameters["nom"].Value = values[2];
                cmd.Parameters["prenom"].Value = values[7];
                cmd.Parameters["actif"].Value = values[11];
    
                cmd.ExecuteNonQuery();
          }
        }
      }
    }
    En espérant avoir pu vous adier.

    Guillaume
    mardi 12 mai 2009 07:26
  • merci mais il affiche des erreurs comme :

    m_DataTable.Add(new object[] {values[2], values[7], values[11]});  :  System.Data.DataTable ne ccontient pas une défiition de Add.

     using (sqlConnection pConnection  = new sqlConnection())  : jeton'using' non valide dans la déclaration

    avec les autres lignes jeton'(' non valide etc
    mardi 12 mai 2009 09:24
  • Bonjour,
    J'ai effectivement fait une faute de frappe :

    m_DataTable.Rows.Add(new object[] {values[2], values[7], Convert.ToBoolean(values[11])});
    En espérant avoir pu vous aider.

    Guillaume
    mardi 12 mai 2009 09:59
  • oui y'a plus d'erreurs mais il affiche que ConnectionString n'a pas été géré

    mardi 12 mai 2009 13:04
  • Bonjour,
    Lors de la création de votre SqlConnection vous devez fournir au constructeur une chaine de connexion.

    En espérant avoir pu vous aider.

    Guillaume
    • Marqué comme réponse mimo85 mardi 12 mai 2009 15:21
    mardi 12 mai 2009 13:15