2010-10-03 9 views
0

im nouveau dans C# et asp.net world! J'ai un problème. En accès db j'ai 2 table (livre, prêt) avec une contrainte d'intégrité référentielle (book.ID = loan.ID).Mise à jour de l'accès db à partir de la valeur de la zone de texte

Dans mon projet j'ai une zone de texte et quand je change une valeur de textbox je dois mettre à jour les tables.

protected void Button1_Click(object sender, EventArgs e) 
{ 
    cod = Request["cod"]; 

    //Componiamo la stringa di interrogazione al database relativa alla tabella b_prestiti 
    qry = "UPDATE b_libri SET codice='" + TextBox1.Text + "' WHERE codice='" + cod + "'"; 
    string qry2 = "SELECT codice_libro FROM b_prestiti WHERE codice_libro='" + cod + "'"; 
    string qry3 = "UPDATE b_prestiti SET codice_libro='"+ TextBox1.Text + "' WHERE codice_libro='" + cod + "'"; 
    string qry4 = "UPDATE b_libri SET titolo='" + TextBox2.Text + "' WHERE codice='" + cod + "'"; 
    string qry5 = "UPDATE b_libri SET autore='" + TextBox3.Text + "' WHERE codice='" + cod + "'"; 
    string qry6 = "UPDATE b_libri SET editore='" + TextBox4.Text + "' WHERE codice='" + cod + "'"; 

    //Creiamo gli oggetti di tipo OleDbConnection 
    //passando la stringa di connessione al costruttore 
    conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
    OleDbConnection conn2 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
    OleDbConnection conn3 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 

    //Inizializziamo gli oggetti di tipo OleDbCommand 
    cmd = conn.CreateCommand(); 
    OleDbCommand cmd2 = conn2.CreateCommand(); 
    OleDbCommand cmd3 = conn3.CreateCommand(); 

    OleDbDataReader reader2 = null; 
    //OleDbDataReader reader3 = null; 

    //Apriamo la connessione 
    conn.Open(); 
    conn2.Open(); 
    conn3.Open(); 
    /* 
    cmd2.CommandText = qry2; 
    reader2 = cmd2.ExecuteReader();*/ 

    if (MessageBox.Show("Sei sicuro di voler aggiornare questo libro?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      if (!first_titolo.Equals(TextBox2.Text) || !first_autore.Equals(TextBox3.Text) || !first_editore.Equals(TextBox4.Text)) 
      { 
       /* while (reader2.Read()) 
       { 
        if (reader2["codice_libro"] != "") 
        { 
         if (MessageBox.Show("VINCOLI REFERENZIALI! Vuoi aggiornare comunque?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes) 
         { 
          cmd3.CommandText = qry3; 
          reader3 = cmd3.ExecuteReader(); 
          reader3.Close(); 

          MessageBox.Show("Vincolo Aggiornato!"); 
         } 
         else Response.Redirect("Default.aspx"); 
        } 

       }*/ 
       /*cmd.CommandText = qry; 
       reader = cmd.ExecuteReader(); 
       reader.Close();*/ 
       MessageBox.Show("aggiornato!"); 
      } 
      else MessageBox.Show("no"); 
      /* 

      if (first_titolo != TextBox2.Text) 
      { 
       cmd.CommandText = qry4; 
       reader = cmd.ExecuteReader(); 
       reader.Close(); 
       MessageBox.Show("Aggiornato!"); 
      } 

      if (first_autore != TextBox3.Text) 
      { 
       cmd.CommandText = qry5; 
       reader = cmd.ExecuteReader(); 
       reader.Close(); 
       MessageBox.Show("Aggiornato!"); 
      } 

      if (first_editore != TextBox4.Text) 
      { 
       cmd.CommandText = qry6; 
       reader = cmd.ExecuteReader(); 
       reader.Close(); 
       MessageBox.Show("Aggiornato!"); 
      } 

     */ 

     } 
     //else Response.Redirect("Default.aspx"); 


// reader2.Close(); 

    //Chiudiamo la connessione 
    conn.Close(); 
    conn2.Close(); 
    conn3.Close(); 

} 

Je ne sais pas comment le faire! Aidez-moi s'il vous plaît!

+1

S'il vous plaît supprimer inutile, a commenté le code – abatishchev

Répondre

1

Difficile à comprendre non anglais pour moi, mais je suggère cela comme une amélioration, vous pouvez faire:

string qry = "UPDATE b_libri " 
        "SET titolo='" + TextBox2.Text + "', " 
        "SET autore='" + TextBox3.Text + "', " 
        "SET editore='"+ TextBox4.Text + "' " 
       " WHERE codice='" + cod + "'"; 

Pour aider avec les autres choses, s'il vous plaît poster la création de votre table et le code de création de contrainte pour nous. Ensuite, nous serons en mesure d'aider avec ces problèmes.

+0

+ 1 a raté complètement ... –

+0

J'ai résolu les différentes valeurs de texbox. – Dario

+0

J'ai résolu les différentes valeurs de texbox. – Dario

1

Je n'ai pas d'expérience avec des connexions OLE, mais il est en principe:

OleDBCommand cmd = conn.CreateCommand(qry3); 

if (cmd.ExecuteNonQuery() > 0) 
{ 
    // at least one row updated 
    //everything is ok 
} 
else 
{ 
    something went wrong 
} 

Utilisez ExecuteNonQuery, il exécute une instruction SQL qui n'est pas un SELECT et retournera les lignes affectées.

De plus, il n'y a pas besoin de plusieurs connexions, une devrait suffire, vous pouvez exécuter plusieurs commandes sur une connexion.

Également repsect la réponse de Hogan! Edit: Selon la suggestion de Hogan a changé la remarque et comparision

HTH

Mario

+0

hmmm ... ExecuteNonQuery() ne renvoie pas le nombre de lignes affectées. Comment est 1 toujours la bonne réponse? Je ne suis pas sûr que ce soit un bon modèle. – Hogan

+1

+1 pour signaler ExecuteNonQuery() comme l'appel correct. – Hogan

0

je résolus sur les différentes valeurs de zone de texte. Maintenant j'ai 2 tables et je devrais vérifier, quand je change la valeur de Codice (Id), s'il y a une contrainte d'intégrité référentielle .

// Aggiorna 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     cod = Request["cod"]; 

     //Componiamo la stringa di interrogazione al database relativa alla tabella b_prestiti 
     qry = "UPDATE b_libri SET codice='" + TextBox1.Text + "' WHERE codice='" + cod + "'"; 
     string qry2 = "SELECT codice_libro FROM b_prestiti WHERE codice_libro='" + cod + "'"; 
     string qry3 = "UPDATE b_prestiti SET codice_libro='" + TextBox1.Text + "' WHERE codice_libro='" + cod + "'"; 
     string qry4 = "UPDATE b_libri SET titolo='" + TextBox2.Text + "' WHERE codice='" + cod + "'"; 
     string qry5 = "UPDATE b_libri SET autore='" + TextBox3.Text + "' WHERE codice='" + cod + "'"; 
     string qry6 = "UPDATE b_libri SET editore='" + TextBox4.Text + "' WHERE codice='" + cod + "'"; 

     //Creiamo gli oggetti di tipo OleDbConnection 
     //passando la stringa di connessione al costruttore 
     conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
     OleDbConnection conn2 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
     OleDbConnection conn3 = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 

     //Inizializziamo gli oggetti di tipo OleDbCommand 
     cmd = conn.CreateCommand(); 
     OleDbCommand cmd2 = conn2.CreateCommand(); 
     OleDbCommand cmd3 = conn3.CreateCommand(); 

     OleDbDataReader reader2 = null; 
     OleDbDataReader reader3 = null; 

     //Apriamo la connessione 
     conn.Open(); 
     conn2.Open(); 
     conn3.Open(); 

     cmd2.CommandText = qry2; 
     reader2 = cmd2.ExecuteReader(); 

     if (changed) 
     { 
      if (MessageBox.Show("Sei sicuro di voler aggiornare questo libro?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes) 
      { 
       if (first_titolo != TextBox2.Text) 
       { 
        cmd.CommandText = qry4; 
        reader = cmd.ExecuteReader(); 
        reader.Close(); 
        MessageBox.Show("Titolo Aggiornato!"); 
       } 

       if (first_autore != TextBox3.Text) 
       { 
        cmd.CommandText = qry5; 
        reader = cmd.ExecuteReader(); 
        reader.Close(); 
        MessageBox.Show("Autore Aggiornato!"); 
       } 

       if (first_editore != TextBox4.Text) 
       { 
        cmd.CommandText = qry6; 
        reader = cmd.ExecuteReader(); 
        reader.Close(); 
        MessageBox.Show("Editore Aggiornato!"); 
       } 
       if (first_codice != TextBox1.Text) 
       { 
        while (reader2.Read()) 
        { 
         if (reader2["codice_libro"] != "") 
         { 
          if (MessageBox.Show("VINCOLI REFERENZIALI! Vuoi aggiornare comunque?", "Confirmation", MessageBoxButtons.YesNo) == DialogResult.Yes) 
          { 

           //reader3.Close(); 
           cmd.CommandText = qry; 
           cmd3.CommandText = qry3; 
           reader3 = cmd3.ExecuteReader(); 
           reader = cmd.ExecuteReader(); 


           // reader.Close(); 
           MessageBox.Show("Vincolo Aggiornato!"); 
          } 
          else Response.Redirect("Default.aspx"); 
         } 
         else 
         { 
          cmd3.CommandText = qry3; 
          reader3 = cmd3.ExecuteReader(); 
          reader3.Close(); 
          Response.Redirect("Default.aspx"); 
         } 
        } 

        cmd.CommandText = qry; 
        reader = cmd.ExecuteReader(); 
        reader.Close(); 
        MessageBox.Show("Codice Aggiornato!"); 
        reader.Close(); 
        // reader3.Close(); 
        conn.Close(); 
        conn2.Close(); 
        conn3.Close(); 
        Response.Redirect("Default.aspx"); 
       } 
      } 
      else Response.Redirect("Default.aspx"); 
     } 
     else Response.Redirect("Default.aspx"); 
    } 

Le problème survient uniquement lorsque (fist_codice! = Textbox1.Text). first_codice est la valeur de la zone de texte au début; Textbox1.Text est la valeur réelle dans la zone de texte1. Merci

+0

Ce n'est pas utile. Si vous voulez changer votre question, veuillez le faire - l'ajout d'une réponse est la mauvaise façon d'utiliser ce site. Changez la question originale. ÉGALEMENT inclure le SQL qui définit vos tables afin que nous puissions vous aider à expliquer le problème que vous rencontrez. Sans cela, il n'y a aucun moyen de savoir ce qui se passe. Le C# est inutile à un problème SQL. – Hogan

Questions connexes