Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Tietokantaan kirjoittaminen ei onnistu

NuMiNi [12.03.2011 15:40:16]

#

Eli ongelma on, että koodini ei kirjoita kunnolla tietoa accdb tietokantaan. Kirjoitus onnistuu, jos käytän allaolevan koodin mukaisesti kahta tietokenttää, mutta ei siinä tapauksessa, jos käytän kaikkia tarvittavia kenttiä. Toivottavasti joku osaisi auttaa.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;

namespace WebApplication5
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string pelinimi = TextBox1.Text;
            string versionro = TextBox2.Text;
            string asennuspaketti = TextBox3.Text;
            string tunnus = TextBox4.Text;
            string kuva = TextBox5.Text;

            string strDSN = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\temp\\tietokanta.accdb;Persist Security Info=True";
            string strSQL = "INSERT INTO Pelit(Nimi, Versio, Asennuspaketti, Petunnus, Kuva) VALUES('" + pelinimi + "', '" + versionro +"', '" + asennuspaketti+"', " + tunnus +", " + kuva +")";
            //(TOIMII)string strSQL = "INSERT INTO Pelit(Nimi, Versio) VALUES('" + pelinimi + "', " + versionro +")";

            //('Peli3', 'Versio 2.0');

            // create Objects of ADOConnection and ADOCommand

            OleDbConnection  myConn = new OleDbConnection(strDSN);
            OleDbCommand myCmd = new OleDbCommand(strSQL, myConn);

            try
            {
                myConn.Open();
                myCmd.ExecuteNonQuery();
            }
            catch (Exception)
            {
                Console.WriteLine("Oooops. I did it again");
            }
            finally
            {
                myConn.Close();
            }




        }
    }
}

Mod. lisäsi kooditagit.

groovyb [12.03.2011 18:10:46]

#

Lisää hipsut values kohdan jokaiseen merkkijonoon. VALUES ('moi','mitä','kuuluu')

NuMiNi [14.03.2011 18:48:42]

#

Kiitos, nyt alkoi toimimaan. Mutta vielä olisi sellainen lisäkysymys, että miten onnistuisi tietokannasta poisto ListBoxista painonapilla, kyseessä on joku DataBound systeemi. Eli mitään koodia en ole listboxiin liittyen kirjoittanut. Tällä hetkellä se listaa tietokannassa olevat pelit. Iso kiitos auttajalle jo etukäteen! :)

neau33 [14.03.2011 22:17:08]

#

Moi NuMiNi!

koodina jutska vois näyttää suurinpiirtein vaikkapa seuraavalta...

//esimerkki väännetty SharpDevelop 4.0:lla
using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

namespace SqlDeleteTest
{

   public partial class MainForm : Form
   {
      internal string connectionstring = string.Empty;
      internal OleDbConnection connection = null;
      internal OleDbDataAdapter da = null;
      internal DataSet ds = null;

      public MainForm()
      {

         InitializeComponent();

      }

      void MainForm_Load(object sender, EventArgs e)
      {

         connectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
         "Data Source=C:\\Tietokanta.accdb;Persist Security Info=True";
         connection = new OleDbConnection(connectionstring);
         ds = new DataSet(); fill_ListBox();

      }

      void fill_ListBox()
      {

         string strSql = "SELECT * FROM TaulunNimi";

         connection.Open();
         da = new OleDbDataAdapter(strSql, connection);
         ds.Tables.Clear();
         da.Fill(ds,"TaulunNimi");
         connection.Close();

         listBox1.DataSource = ds.Tables[0];
         listBox1.DisplayMember =
         ds.Tables[0].Columns[0].ColumnName; //esim.
         listBox1.ValueMember =
         ds.Tables[0].Columns[1].ColumnName; //esim.
         da = null;

      }

      void DeleteButton_Click(object sender, System.EventArgs e)
      {

         connection.Open();
         string strSQL = "DELETE FROM TaulunNimi Where "
         + listBox1.DisplayMember.ToString() + " = '" +
         ds.Tables[0].Rows[listBox1.SelectedIndex][0] + "'";
         OleDbCommand command = new OleDbCommand(strSQL, connection);

         command.ExecuteNonQuery();
         command = null;
         connection.Close();
         fill_ListBox();

      }

      void MainForm_FormClosing(object sender, FormClosingEventArgs e)
      {
         try
         {
            connection.Close();
         }
         catch(Exception ex)
         {
            string message = ex.Message;
         }
         connection = null;
         ds = null;
      }
   }
}

Vastaus

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

Tietoa sivustosta