Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: Insert-komennon päivitys ohjelmaan?

Keanna [11.11.2010 18:36:19]

#

Tietojen lisäys insert-komennolla onnistuu, ne tulevat näkyviin tietokantaan, mutta ohjelman puolelle se ei päivity! ASP.NET-sivuja teen..

MasterPagella on Lisää-nappi tietokoneen ja käyttäjän lisäämiselle, jota painamalla päästään uusille sivuille jossa tiedot voi lisätä. Tapauksessani lisään insert-komennolla ensin tietokoneen, ja sen jälkeen käyttäjän. Tämä onnistuu, mutta kun MasterPagella valitsen alasvetovalikosta juuri lisäämäni henkilön ja haluan näyttää henkilön laitetiedot, tulostuu vain pelkkä henkilön nimi tekstikenttään, mutta muut tekstikentät, joihin laitetiedot pitäisi tulostua, jäävät tyhjiksi!

Tietokonetta lisättäessä lisätään pelkästään tietokoneen tiedot:

protected void BtnLisaa_Click(object sender, EventArgs e)
    {
        string sql = "INSERT INTO Tietokone (TietokoneNimi, TietokoneIp, TietokoneSijainti, "
                   + "Cpu, Ram, Kovo, Os, Malli, Serial, Leasing ) VALUES ('" + TbTietokone.Text +
                   "', '" + TbIp.Text + "', '" + TbTila.Text + "', '" + TbCpu.Text + "', '" + TbRam.Text +
                   "', '" + TbKovo.Text + "', '" + TbOs.Text + "', '" + TbMalli.Text + "', '" + TbSerial.Text +
                   "', '" + TbLeasing.Text + "')";

        using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\ont\\db.mdb"))
        {
            OleDbCommand command = new OleDbCommand(sql, connection);
            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        }
 }

Seuraavaksi lisätään käyttäjä:

protected void BtnLisaa_Click(object sender, EventArgs e)
    {
        string sql = "INSERT INTO Kayttaja (KayttajaNimi, TietokoneNimi, Tyohuone) "
                   + "VALUES ('" + TbKayttaja.Text + "', '" + TbTietokone.Text + "', '" + TbTila.Text + "')";

        using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\ont\\db.mdb"))
        {
            OleDbCommand command = new OleDbCommand(sql, connection);
            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        }


    }

Käyttäjälle siis pitää lisätä jo olemassaoleva tietokone, mutta jostain syystä ohjelman puolella ne ei osaa yhdistyä....

Helppiä pliiz?? Mikä vikana!?

neau33 [13.11.2010 05:49:29]

#

Moi Keanna!

unohda vähaksiaikaa masterpage jutskat ja tutki hieman oheista simppeliä esimerkkiä

//Default.aspx.cs
using System;
using System.Data;
using System.Data.OleDb;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
   public static int cnt = 0;
   public static DataSet ds = new DataSet();

   internal OleDbConnection connection = null;
   internal OleDbCommand command = null;
   internal OleDbDataAdapter da = null;
   internal OleDbCommandBuilder cb = null;

   protected void Page_Load(object sender, EventArgs e)
   {
      if (!IsPostBack)
      {
         Panel1.Visible = true;
         Panel2.Visible = false;
      }

   }

   protected void Page_Unload(object sender, System.EventArgs e)
   {
      if (connection != null)
      {
         try
         {
            connection.Close();
         }
         catch
         {
         }
         connection = null;
      }
   }

   protected void Button1_Click(object sender, EventArgs e)
   {

      if (cnt == 0)
      {
         foreach (Control ctl in Panel1.Controls)
         {
            if ((ctl) is TextBox)
            {
               TextBox txtBox = (TextBox)ctl;
               if (txtBox.Text == String.Empty)
               {
                  txtBox.Focus();
                  return;
               }

            }
         }

         Panel1.Visible = false;
         Button1.Visible = false;
         String sql =
         "INSERT INTO Tietokone (TietokoneNimi, TietokoneIp, TietokoneSijainti, "
         + "Cpu, Ram, Kovo, Os, Malli, Serial, Leasing ) VALUES ('" +
         TextBox1.Text + "', '" + TextBox2.Text + "', '" +
         TextBox3.Text + "', '" + TextBox4.Text + "', '" +
         TextBox5.Text + "', '" + TextBox7.Text + "', '" +
         TextBox7.Text + "', '" + TextBox8.Text + "', '" +
         TextBox9.Text + "', '" + TextBox10.Text + "')";
         InsertToDataBase(sql); Panel2.Visible = true;
         Button1.Visible = true; cnt++; return;
      }
      else if (cnt == 1)
      {
         foreach (Control ctl in Panel2.Controls)
         {
            if ((ctl) is TextBox)
            {
               TextBox txtBox = (TextBox)ctl;
               if (txtBox.Text == String.Empty)
               {
                  txtBox.Focus();
                  return;
               }
            }
         }

         Panel2.Visible = false;
         Button1.Visible = false;
         String sql =
         "INSERT INTO Kayttaja (KayttajaNimi, TietokoneNimi, Tyohuone, Serial) "
         + "VALUES ('" + TextBox11.Text + "', '" +
         TextBox12.Text + "', '" + TextBox13.Text + "', '" + TextBox9.Text + "')";
         InsertToDataBase(sql);

         bool failed = false;

         if(ds.Tables.Count == 1)
         {
            connection.Open();
            for(int i = 0; i < 1; i++)
            {
               if (i == 0)
               {
                  sql = "Delete from [Tietokone] Where Serial='"
                                           + TextBox9.Text + "'";
               }
               else if (i == 1)
               {
                  sql = sql = "Delete from [Kayttaja] Where Serial='"
                                                + TextBox9.Text + "'";
               }
               command = new OleDbCommand(sql, connection);
               command.ExecuteNonQuery(); Thread.Sleep(250);
            }

            failed = true;
         }
         else if(ds.Tables.Count == 0)
         {
            failed = true;
         }

         ds.Tables.Clear(); ds = null;

         if (failed)
         {
            Response.Redirect("https://www.ohjelmointiputka.net/");
         }
         else
         {
            Response.Redirect("ThePage.aspx");
         }
      }
   }

   protected void InsertToDataBase(string sql)
   {

      string dbPath = Server.MapPath("TIETOKANTA.mdb");
      string query = String.Empty;

      connection = new OleDbConnection(
      "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbPath);

      command = new OleDbCommand(sql, connection);
      connection.Open();
      try
      {
         command.ExecuteNonQuery(); Thread.Sleep(250);

         if (cnt == 0)
         {
            query = "Select * From [Tietokone] Where Serial = '"
            + TextBox9.Text + "'";
            da = new OleDbDataAdapter(query, connection);
            da.Fill(ds, "Tietokone"); da = null;
         }
         else if (cnt == 1)
         {
            query = "Select * From [Kayttaja] Where TietokoneNimi='"
            + TextBox9.Text + "'";
            da = new OleDbDataAdapter(query, connection);
            da.Fill(ds, "Kayttaja"); da = null;
         }
      }
      catch(Exception ex)
      {
         Response.Write(ex.Message);
      }
      connection.Close();

   }
}
//ThePage.aspx.cs
using System;
using System.Data;
using System.Data.OleDb;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ThePage : System.Web.UI.Page
{

   protected void Page_Load(object sender, EventArgs e)
   {
      if (!IsPostBack)
      {
         String dbPath = Server.MapPath("TIETOKANTA.mdb");
         OleDbConnection connection = new OleDbConnection(
         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbPath);
         String query = "SELECT * FROM Tietokone";
         OleDbDataAdapter da =
         new OleDbDataAdapter(query, connection);
         DataSet ds = new DataSet();
         da.Fill(ds, "Tietokone");
         da = null; connection = null;
         GridView1.DataSource = ds.Tables["Tietokone"];
         GridView1.DataBind();
         GridView1.SelectedIndex = 0;
         FillGridView2(GridView1.SelectedIndex);
      }
   }

   protected void Page_Unload(object sender, System.EventArgs e)
   {

   }
   protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
   {
      FillGridView2(GridView1.SelectedIndex);
   }

   protected void FillGridView2(int index)
   {
      try
      {
         String search =
         GridView1.Rows[index].Cells[9].Text;
         String dbPath = Server.MapPath("TIETOKANTA.mdb");
         OleDbConnection connection = new OleDbConnection(
         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbPath);

         DataSet ds = new DataSet();
         String query = "SELECT * FROM Kayttaja Where Serial='" + search + "'";

         OleDbDataAdapter da = new OleDbDataAdapter(query, connection);
         da.Fill(ds, "Kayttaja");
         da = null; connection = null;
         GridView2.DataSource = ds.Tables["Kayttaja"];
         GridView2.DataBind();
      }
      catch { }
   }

}

halutessasi voit impata täältä koko esimerkki projektin

Keanna [16.11.2010 18:54:45]

#

Ongelma on siis siinä että ne kyllä tallentuu tietokantaan mutta ohjelma ei saa niitä tulostettua pihalle. Ja datasettiä en aijo käyttää.

neau33 [17.11.2010 17:06:39]

#

Moi taas Keanna!

Pukkaat ensin tänne näkyville sen osan koodistasi, joka mielestäsi toimii ja sitten pyydät: "Helppiä pliiz??"
Nyt kun on niin, että et tule käyttämään datasettiä niin pistä nyt ihmeessä näkyville se osa koodia, jolla yrität tuoda päivitetyn kaman näkyville eli siis se osa joka, tökkii niin voisi olla edes mahdollista auttaa...

neau33 [18.11.2010 19:37:56]

#

Moi taas Keanna!

tässä vielä esimerkki ilman datasettiä...

elikä lisää projektiisi referenssi: System.Windows.Forms
(niin saat MessageBoxin näkyville testaamista varten)

//...
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

protected void BtnLisaa_Click(object sender, EventArgs e)
{
   string sql = "INSERT INTO Tietokone (TietokoneNimi,
   TietokoneIp, TietokoneSijainti, "
   + "Cpu, Ram, Kovo, Os, Malli, Serial, Leasing ) VALUES ('"
   + TbTietokone.Text + "', '" + TbIp.Text + "', '"
   +  TbTila.Text + "', '" + TbCpu.Text + "', '" + TbRam.Text
   + "', '" + TbKovo.Text + "', '" + TbOs.Text + "', '" +
   TbMalli.Text + "', '" + TbSerial.Text + "', '" + TbLeasing.Text + "')";

   using (OleDbConnection connection = new OleDbConnection
   ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\ont\\db.mdb"))
   {
      OleDbCommand command = new OleDbCommand(sql, connection);
      connection.Open();
      command.ExecuteNonQuery();

      //testi...
      command.CommandText = "SELECT * FROM [Tietokone]";
      OleDbDataReader MyDataReader = command.ExecuteReader();

      if (MyDataReader.HasRows)
      {
         while (MyDataReader.Read())
         {
            string strFields = "TIETOKONE: " + Environment.NewLine;

            for (int i = 0; i <= MyDataReader.FieldCount - 1; i++)
            {
               strFields += MyDataReader[i].ToString();

               if (i < MyDataReader.FieldCount - 1)
               {
                  strFields += " | ";
               }
            }
         }
         MessageBox.Show(strFields);
      }
      else
      {
         MessageBox.Show("Taulusta: 'Tietokone' ei löytynyt tietueita");
      }
      MyDataReader.Close(); //...

      connection.Close();
   }
}
]//...
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

protected void BtnLisaa_Click(object sender, EventArgs e)
{
   string sql = "INSERT INTO Kayttaja
   (KayttajaNimi, TietokoneNimi, Tyohuone) "
   + "VALUES ('" + TbKayttaja.Text + "', '"
   + TbTietokone.Text + "', '" + TbTila.Text + "')";

   using (OleDbConnection connection = new OleDbConnection
  ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\ont\\db.mdb"))
   {
      OleDbCommand command = new OleDbCommand(sql, connection);
      connection.Open();
      command.ExecuteNonQuery();

      //testi...
      command.CommandText = "SELECT * FROM [Kayttaja]";
      OleDbDataReader MyDataReader = command.ExecuteReader();

      if (MyDataReader.HasRows)
      {
         while (MyDataReader.Read())
         {
            string strFields = "KÄYTTÄJÄ: " + Environment.NewLine;

            for (int i = 0; i <= MyDataReader.FieldCount - 1; i++)
            {
               strFields += MyDataReader[i].ToString();

               if (i < MyDataReader.FieldCount - 1)
               {
                  strFields += " | ";
               }
            }
         }
         MessageBox.Show(strFields);
      }
      else
      {
         MessageBox.Show("Taulusta: 'Kayttaja' ei löytynyt tietueita");
      }
      MyDataReader.Close(); //...

      connection.Close();
   }
}

Keanna [02.12.2010 17:34:00]

#

Ongelma tulikin jo korjattua. Johtui siitä et en ollu syöttäny kaikille kentille arvoa lisäysvaihees jokka näkyi masterilla valitessa. Asia on nyt ok. :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta