Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Transakcije u Bazu Podataka C#!Ne mogu da skontam nikako!!

  • 3 odgovora
  • 4.059 pregleda

Najnovija ↓

Transakcije u Bazu Podataka C#!Ne mogu da skontam nikako!! 18.12.2006. u 17:28 · pre 241 mesec #1
Ljudi dao mi drug zadatak,radili na fakultetu,nije znao da ga uradi!I ja probah ali imam problema!

Zadatak je sledeci:
data je baza Student i u njoj tabela Student i Ocena.Poterbno je da se u jednoj transakciji u bazu ubace student(ciji se podaci inace unose u Textbox) i sve njegove ocene(koje se inace unose u DataGrid).
Ovo da ubacim studenta kontam,ali ovaj deo sa ocenama ne radi.Tj ne znam kako treba da izgleda foreach petlja a ne mogu da skontam ni kako treba da mi izgleda INSERT naredba za ubacivanje ocena koje unesem u DataGrid!Evo kod,pa ako neko moze da ispravi bas bi mi znacilo,posto se celi dan mucim(mozda je glup al sta da radim..)!

Hvala!

Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace StudentOcena
{
    public partial class StudOcena : Form

    {
        OleDbConnection konekcija;
        OleDbTransaction transakcija;
        DataTable dt;
        public StudOcena()
        {
            InitializeComponent();
            string konekcioniString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\SiK\Desktop\Student.mdb;Persist Security Info=False";
            konekcija = new OleDbConnection(konekcioniString);
            dt = new DataTable();
            dt.Columns.Add("PredmetID");
            dt.Columns.Add("Profesor");
        dt.Columns.Add("Ocena");
            dataGridView1.DataSource = dt;

        }
        private void btnSacuvaj_Click(object sender, EventArgs e)
                    {
            string ubaciStud = "INSERT INTO Student VALUES('" + txtStudentID.Text+ "','"+txtIme.Text+"','"+txtPrezime.Text+"','"+BrInd.Text+"')";

            string ubaciOcenu = "INSERT INTO Ocena VALUES('" + txtStudentID.Text +"','" +dt.Columns["PredmetID"].ToString() + "','" + dt.Columns["Profesor"].ToString() + "','" + dt.Columns["Ocena"].ToString() + "')"; 
            transakcija = null;
          
            try
            {
                konekcija.Open();
                transakcija = konekcija.BeginTransaction();
                OleDbCommand komanda = new OleDbCommand(ubaciStud, konekcija, transakcija);
                komanda.ExecuteNonQuery();
                foreach (DataRow red in //…)// ili je mozda problem ovdje u petlji???
                {                   
                    transakcija=konekcija.BeginTransaction();
                    komanda = new OleDbCommand(ubaciOenu, konekcija, transakcija);
                    komanda.ExecuteNonQuery();
                  
                }

                transakcija.Commit();
            }
            catch (Exception)
            {
                transakcija.Rollback();
            }
            finally
            {
                konekcija.Close();
            }
        }      
    }
}
Re: Transakcije u Bazu Podataka C#!Ne mogu da skontam nikako!! 19.12.2006. u 09:21 · pre 241 mesec #2
Ako tabela Student ima 4 polja (StudentID, Ime, Prezime, BrIndeksa) SQL iskaz INSERT za tabelu student je OK, ako ima vise polja onda treba da izgleda ovako:

"INSERT INTO Student (StudentID, Ime, Prezime, BrIndeksa) VALUES ('" + txtStudentID.Text+ "','" + txtIme.Text + "','"+txtPrezime.Text + "','"+BrInd.Text+"')

Isto vazi i za tabelu Ocene

Ja bi Kod napisao ovako. Ustvari ovo je moj template koji 100% radi, prilagodjen tvom problemu
Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace StudentOcena
{
    public partial class StudOcena : Form

    {
        OleDbConnection konekcija = null;
        OleDbTransaction transakcija = null;
        OleDbCommand komanda = null;

        DataTable dt;

        public StudOcena()
        {
            InitializeComponent();
            string konekcioniString = @"ovde ide tvoj ConnectionString";
            konekcija = new OleDbConnection(konekcioniString);

            try { konekcija.Open(); }
           catch (OleDbException e)
           {
              // Baza podataka nije otvorena
               MessageBox.Show(e.Message);
           } 
            // Baza podataka je otvorena
            komanda = konekcija.CreateCommand();
            Komanda.Connection = konekcija;
            komanda.Transaction = transakcija;
           
            dt = new DataTable();
            dt.Columns.Add("PredmetID");
            dt.Columns.Add("Profesor");
            dt.Columns.Add("Ocena");
            dataGridView1.DataSource = dt;
        }
        private void btnSacuvaj_Click(object sender, EventArgs e)
        {
            string ubaciStud = "INSERT INTO Student VALUES('" + txtStudentID.Text+ "','" + txtIme.Text + "','" + txtPrezime.Text + "','"+BrInd.Text+"')";
            
            komanda.CommandText = ubaciStud
            transakcija = konekcija.BeginTransaction();
            try
            {
                
                komanda.ExecuteNonQuery();
                foreach (DataRow red in dataGridView1.Rows)
                {
                   string ubaciOcenu = "INSERT INTO Ocena VALUES('" + txtStudentID.Text +"','" + red["PredmetID"].ToString() + "','" + red["Profesor"].ToString() + "','" + red["Ocena"].ToString() + "')";                    
                    komanda.CommandText = ubaciOenu;
                    komanda.ExecuteNonQuery();                  
                }                
            }
            catch (OleDBException)
            {
                transakcija.Rollback();
            }
            transakcija.Commit();
            finally
            {
                konekcija.Close();
            }
        }      
    }
}
Potpis
Idemo dalje
Re: Transakcije u Bazu Podataka C#!Ne mogu da skontam nikako!! 19.12.2006. u 09:22 · pre 241 mesec #3
Ovde fali dosta koda, nadam se da nisi hteo da ga stavis, ali ako je pseuudo, mogu da ti pomognem. Ako nije pseudo kod onda ti treba tabela iz koje vadis redove kroz koje iteriras.
Greska je u ponovnom otvaranju transakcije

Code:

foreach (DataRow red in //…)// ili je mozda problem ovdje u petlji???
 {                   
     //transakcija=konekcija.BeginTransaction();
     komanda = new OleDbCommand(ubaciO[b]c[/b]enu, konekcija, transakcija);
     komanda.ExecuteNonQuery();


A kako izgleda sintaksa za foreach nadji u MSDN-u
Potpis
Nije važno stići prvi. Važno je prvo da stigneš.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme