[ zenmorke @ 07.09.2009. 12:45 ] @
Naime,treba da se izvrsi upit nad bazom pod odredjenim uslovom.Korisnik zadaje pocetnu vrednost i krajnju vrednost(u pitanju je broj),pri cemu se ti brojevi od pocetne do krajnje vredosti takodje upisuju u bazu.svi ostali atributi su isti samo vrednosti brojeva menjaju i upisuju sa ostalim atributima u bazu.

Javlja mi gresku "ExecuteNonQuery: Connection property has not been initialized."

ali ne vidim zasto do toga dolazi pa ako imate neke sugestije i idejebicu zahvalan...

Hvala unapred.

Code:

....
{
    private ConnectToAccess baza;
    private string tabela = "TABELA";
    protected void Page_Load(object sender, EventArgs e)
    {
       
    }
    protected void btnOK_Click(object sender, EventArgs e)
    {

        int vrednost = Convert.ToInt32(txtPocetniBroj.Text);
        int krajnji = Convert.ToInt32(txtKrajnjiBroj.Text);

        try
        {
            if (vrednost <= krajnji)
            {
                baza = new ConnectToAccess(Server.MapPath("xxxxxxx.mdb"));
                string[] kolone_novi_zapis = new string[] { "atribut1", "atribut2", "atribut3", "VREDNOST", "atribut4" };
                string[] verdnosti_novi_zapis = new string[] { "\'" + atribut1.Text + "\'", "\'" + atribut2.Text + "\'", "\'" + atribut3.Text + "\'","'" +  vrednost + "'", "\'" + atribut4.Text + "\'" };
                int rez_unos_podataka = baza.AccessUpisiPodatak(verdnosti_novi_zapis, kolone_novi_zapis, tabela);
                if (rez_unos_podataka > 0)
                    vrednost++;
                else
                    lblTest.Text = "greska";
            }
            else
            {
                lblTest.Text = "greska";
            }
    
        }
        catch
        {
        }
        

    }

}
[ Dejan Carić @ 07.09.2009. 13:12 ] @
Treba pogledati šta se dešava ovde:
Code:
baza.AccessUpisiPodatak(verdnosti_novi_zapis, kolone_novi_zapis, tabela);

Iz poruke se može zaključiti da komandi nisi dodelio konekciju.
[ zenmorke @ 07.09.2009. 13:25 ] @
evo koda

Code:

....
        public string PorukaGreske;
        const string konekcioniParametri = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
        private string konekcioniString = "";
        private string putanja = "";

        public string Putanja
        {
            set
            {
                putanja = value;
                konekcioniString = konekcioniParametri + "\"" + putanja + "\"";
            }
            get { return putanja; }
        }

        private OleDbConnection konekcija = null;
        private OleDbDataReader rezultatUpita = null;

        public OleDbDataReader RezultatUpita
        {
            get { return rezultatUpita; }
        }

        public void AccessDekonekcija()
        {
            if (konekcija != null)
                konekcija.Close();
        }

        public ConnectToAccess(string a_putanja)
        {
            putanja = a_putanja;
            konekcioniString = konekcioniParametri + "\"" + putanja + "\"";
        }

        public bool AccessKonekcija()
        {
            PorukaGreske = "";
            bool rezultat = false;
            AccessDekonekcija();
            try
            {
                konekcija = new OleDbConnection(konekcioniString);
                konekcija.Open();
                rezultat = true;
            }
            catch (Exception ex)
            {
                PorukaGreske = ex.Message.ToString();
            }
            return rezultat;
        }
...


a ovo je za upit

Code:

public int AccessUpisiPodatak(string[] a_Vrednosti, string[] a_Atributi, string a_Tabela)
        {
            PorukaGreske = "";
            int rezultat = 0;
            if ((!String.IsNullOrEmpty(a_Tabela)) && (a_Atributi.Length > 0) && (a_Vrednosti.Length > 0) && (a_Atributi.Length == a_Vrednosti.Length))
            {
                string stringUpita = "INSERT INTO " + a_Tabela + " (";
                stringUpita += a_Atributi[0];
                for (int i = 1; i < a_Atributi.Length; i++)
                    stringUpita += " , " + a_Atributi[i];

                stringUpita += ") VALUES (" + a_Vrednosti[0];
                for (int i = 1; i < a_Vrednosti.Length; i++)
                    stringUpita += " , " + a_Vrednosti[i];
                stringUpita += ")";

                try
                {
                    OleDbCommand komanda = new OleDbCommand(stringUpita, konekcija);
                    rezultat = komanda.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    rezultat = -1;
                    PorukaGreske = ex.Message.ToString();
                }
            }
            return rezultat;
        }


Kada terba da mi upise jedan podatak sve je u redu,medjutim kada ga stavim u if ili do while petlju ne radi...
[ Dejan Carić @ 07.09.2009. 14:12 ] @
Malo mi je teško da se snađem u tvom kodu.
Imaš 2 načina.

1. Konekciju napravi unutar metode AccessUpisiPodatak
2. Konekciju prosledi metodi AccessUpisiPodatak

Probaj malo da refaktorišeš kod. Uradi nešto ovako:
Code:

int rowsAffected = 0;

using (OleDbConnection conn = new OleDbConnection("some_connection_string"))
{
    OleDbCommand cmd = conn.CreateCommand();

    cmd.CommandText = "your_query";

    conn.Open();
    rowsAffected = cmd.ExecuteNonQuery();
}

return rowsAffected;
[ zenmorke @ 07.09.2009. 14:35 ] @
Uspeo sam da resim.
Bilo je vise stvari u pitanju.
Prvo sam upit stavio u do while petlju i konekciju na bazu pre petlje a zatvaranje konekcije posle upita, ali jos bitnija stvar je ta da kada imas vise upita sa slicnim podacima moras da omogucih dupliranje vrednosti u polju redova u access-u. Izgleda da je to bio najveci problem...Hvala na asistenciji u svakom slucaju.