[ tranzicija @ 26.07.2004. 18:41 ] @
Pozdrav!

Tek pocinjem da se bavim C#-om pa sam naisao na problem, naizgled banalan.

Imam u klasi, koja je inace komponenta, netipiziran DataSet koji ima jednu tabelu.
To sam odradio pomucu Object Inspector-a na tom DataSet-u.

Problem je sledeci:
Ne mogu da ubacim podatke u DataSet!
Znaci:
Code:
private System.Data.DataSet dsMestoNetipski;
private System.Data.DataRow mestoRed;
private System.Data.DataTable tabMesto;


Znaci, DataSet "zna" da sadrzi tabMesto, to je ok samo nisam naveo kod...

Kada u mestoRed pokusam da dodam vrednosti - nista se ne desava - dodela se ne izvrsi!

Code:
mestoRed = this.tabMesto.NewRow();
mestoRed[0] = Guid.NewGuid();
mestoRed[1] = nazivMesta //string koji je deklarisan i ima vrednost
mestoRed[2] = Int64.Parse(postanskiFah)
 //takodje deklarisan kao string ali u tabeli je Int64
this.tabMesto.Rows.Add(mestoRed);
this.dsMestoNetipski.AcceptChanges();


Po meni je logicno da ovo radi, ali nije tako. Ako gresim, nisam svestan toga.
Vec dodela vrednosti redu mestoRed nista ne uradi (za GUID ostane null reference, za string Object reference), nama pravih vrednosti.

Ako neko moze da mi pomogne bio bih mu/joj zahvalan...
Jos bolje, hvala unapred!
[ ace @ 27.07.2004. 01:25 ] @
pozovi update na adapteru.
[ tranzicija @ 27.07.2004. 01:49 ] @
Nije u tome problem...
Radi se o tome da Update nece nista uraditi jer DataSet ostane prazan...

Problem je sto ne dodeljujem dobro vrednosti a ne znam zasto...
[ ace @ 27.07.2004. 02:21 ] @
izbaci privatne stvari iz koda i baci ga na mail.
[ dusty @ 27.07.2004. 09:19 ] @
Mozda si zaboravio da copy&paste, ali gde si tabelu tblMesto ubacio u DataSet ?
Predlazem ti da 'debagujes', tako sto ces na formi napraviti dataGrid i da je bindujes samo za tabelu tblMesto, ali ne preko dataSeta:

Code:

dataGrid1.DataSource = tblMesto;


i da vidis sta se ubacuje u tu tabelu.
[ tranzicija @ 27.07.2004. 15:38 ] @
Nisam napisao ali postoji kod koji kaze da tabMesto pripada DataSet-u....
Evo ovaj:
Code:
// dsMestoNetipski
            // 
            this.dsMestoNetipski.DataSetName = "dsMestoNetipski";
            this.dsMestoNetipski.Locale = new System.Globalization.CultureInfo("sr-SP-Latn");
            this.dsMestoNetipski.Tables.AddRange(new System.Data.DataTable[] {
                        this.tabMesto});
            // 
            // tabMesto
            // 
            this.tabMesto.Columns.AddRange(new System.Data.DataColumn[] {
                        this.dcMestoID,
                        this.dcNazivMesta,
                        this.dcPostanskiFah});
            this.tabMesto.Constraints.AddRange(new System.Data.Constraint[] {
                        new System.Data.UniqueConstraint("Constraint1", new string[] {
                                    "mestoID"}, true),
                        new System.Data.UniqueConstraint("Constraint2", new string[] {
                                    "postanskiFah"}, false)});
            this.tabMesto.PrimaryKey = new System.Data.DataColumn[] {
                    this.dcMestoID};
            this.tabMesto.TableName = "MESTO";
            // 
            // dcMestoID
            // 
            this.dcMestoID.AllowDBNull = false;
            this.dcMestoID.ColumnName = "mestoID";
            this.dcMestoID.DataType = typeof(System.Data.SqlTypes.SqlGuid);
            // 
            // dcNazivMesta
            // 
            this.dcNazivMesta.AllowDBNull = false;
            this.dcNazivMesta.ColumnName = "nazivMesta";
            this.dcNazivMesta.DataType = typeof(System.Data.SqlTypes.SqlString);
            // 
            // dcPostanskiFah
            // 
            this.dcPostanskiFah.ColumnName = "postanskiFah";
            this.dcPostanskiFah.DataType = typeof(System.Data.SqlTypes.SqlInt64);
            ((System.ComponentModel.ISupportInitialize)(this.bdpDataAdapter1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.dsMestoNetipski)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.tabMesto)).EndInit();

Kada vratim do forme DataTable tabMesto, onda sve sljaka i prikazuje dobro i primenjuje constraints dobro, ali ako vratim ceo DataSet nista ne prikazuje...
Takodje, pravi razliku ako za mestoRed stavim da je:
Code:
mesto red = this.tabMesto.NewRow();
bla, bla...
this.tabMesto.Rows.Add(mestoRed);

i
Code:
mesto red = this.dsMestoNetipski.Tables["MESTO"].NewRow;
bla, bla...
this.dsMestoNetipski.Tables["MESTO"].Rows.Add(mestoRed);

Kod ovog poslednjeg ne primenjuje constraints...
Zasto pravi razliku kad se iz gornjeg koda vidi da tabMesto pripada DataSet-u dsMestoNetipski?
[ mmix @ 28.07.2004. 19:45 ] @
Ok, nekoliko dobronamernih primedbi:

1. Primary key uvek definiši pre ostalih constraint-a i onda nemoj ponovo stavljati PK polje kao unique constraint pošto će taj constraint već biti dodat pri kreiranju PKa
2. Uvek konfiguriši stvari hijerarhijski od najniže grane ka najvišoj, dakle, ne dataset pa datatable pa datacolumn nego obrnuto. Tačno je da se radi o referencama, ali imaj u vidu da dataset možda nešto iskešira na osnovu neinicijalizovane tabele ili column-a.
3. Nemoj pozivati EndInit ako nisi pozvao BeginInit. Ovim kodom si zatvorio petlju u dataobjektima pre nego što je trebalo, mislim da ti je tu greška. FOrm konstruktor je posle nešto radio nad njima računajući da još ima svoj BeginInit otvoren.

Probaj sledeći kod umesto onog gore:

Code:

// 
// dcMestoID
// 
this.dcMestoID.AllowDBNull = false;
this.dcMestoID.ColumnName = "mestoID";
this.dcMestoID.DataType = typeof(System.Data.SqlTypes.SqlGuid);
// 
// dcNazivMesta
// 
this.dcNazivMesta.AllowDBNull = false;
this.dcNazivMesta.ColumnName = "nazivMesta";
this.dcNazivMesta.DataType = typeof(System.Data.SqlTypes.SqlString);
// 
// dcPostanskiFah
// 
this.dcPostanskiFah.ColumnName = "postanskiFah";
this.dcPostanskiFah.DataType = typeof(System.Data.SqlTypes.SqlInt64);
// 
// tabMesto
// 
this.tabMesto.BeginInit();
this.tabMesto.Columns.AddRange(new System.Data.DataColumn[] {
    this.dcMestoID,
    this.dcNazivMesta,
    this.dcPostanskiFah});
this.tabMesto.PrimaryKey = new System.Data.DataColumn[] {
this.dcMestoID};
this.tabMesto.Constraints.AddRange(new System.Data.Constraint[] {
        new System.Data.UniqueConstraint(this.dcPostanskiFah, false)
    });
this.tabMesto.TableName = "MESTO";
this.tabMesto.EndInit();
//
// dsMestoNetipski 
//
this.dsMestoNetipski.BeginInit();
this.dsMestoNetipski.DataSetName = "dsMestoNetipski";
this.dsMestoNetipski.Locale = new System.Globalization.CultureInfo("sr-SP-Latn");
this.dsMestoNetipski.Tables.AddRange(new System.Data.DataTable[] {this.tabMesto});
this.dsMestoNetipski.EndInit();
[ tranzicija @ 29.07.2004. 01:57 ] @
Op, izvinjavam se mmix, moja greska je sto nisam postovao ceo kod, ali mi se cinilo mnogo...Evo ovako izgleda cela inicijalizacija (same dekleracije cu preskociti, one su iznad naravno)

Code:

private void InitializeComponent()
        {
            this.bdpSelectCommand1 = new Borland.Data.Provider.BdpCommand();
            this.bdpConnection1 = new Borland.Data.Provider.BdpConnection();
            this.bdpInsertCommand1 = new Borland.Data.Provider.BdpCommand();
            this.bdpUpdateCommand1 = new Borland.Data.Provider.BdpCommand();
            this.bdpDeleteCommand1 = new Borland.Data.Provider.BdpCommand();
            this.bdpDataAdapter1 = new Borland.Data.Provider.BdpDataAdapter();
            this.dsMestoNetipski = new System.Data.DataSet();
            this.tabMesto = new System.Data.DataTable();
            this.dcMestoID = new System.Data.DataColumn();
            this.dcNazivMesta = new System.Data.DataColumn();
            this.dcPostanskiFah = new System.Data.DataColumn();
            ((System.ComponentModel.ISupportInitialize)(this.bdpDataAdapter1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.dsMestoNetipski)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.tabMesto)).BeginInit();
            // 
            // bdpSelectCommand1
            // 
            this.bdpSelectCommand1.CommandOptions = null;
            this.bdpSelectCommand1.CommandText = "SELECT mestoID, nazivMesta, postanskiFah FROM MESTO";
            this.bdpSelectCommand1.CommandType = System.Data.CommandType.Text;
            this.bdpSelectCommand1.Connection = this.bdpConnection1;
            this.bdpSelectCommand1.ParameterCount = ((short)(0));
            this.bdpSelectCommand1.SchemaName = null;
            this.bdpSelectCommand1.Transaction = null;
            this.bdpSelectCommand1.UpdatedRowSource = System.Data.UpdateRowSource.None;
            // 
            // bdpConnection1
            // 
            this.bdpConnection1.ConnectionOptions = "transaction isolation=ReadCommitted;blob size=1024";
            this.bdpConnection1.ConnectionString = "database=Partner_Ing_GUID;hostname=localhost;assembly=Borland.Data" +  
                ".Mssql,Version=1.1.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0" +  
                "d1b1b;vendorclient=sqloledb.dll;provider=MSSQL;username=sa;passwo" +  
                "rd=";
            // 
            // bdpInsertCommand1
            //
            this.bdpInsertCommand1.CommandOptions = null;
            this.bdpInsertCommand1.CommandText = "INSERT INTO MESTO (mestoID, nazivMesta, postanskiFah) VALUES (?,?," +  
                "?";
            this.bdpInsertCommand1.CommandType = System.Data.CommandType.Text;
            this.bdpInsertCommand1.Connection = this.bdpConnection1;
            this.bdpInsertCommand1.ParameterCount = ((short)(0));
            this.bdpInsertCommand1.SchemaName = null;
            this.bdpInsertCommand1.Transaction = null;
            this.bdpInsertCommand1.UpdatedRowSource = System.Data.UpdateRowSource.None;
            // 
            // bdpUpdateCommand1
            // 
            this.bdpUpdateCommand1.CommandOptions = null;
            this.bdpUpdateCommand1.CommandText = "UPDATE MESTO SET mestoID = ?, nazivMesta = ?, postanskiFah = ?";
            this.bdpUpdateCommand1.CommandType = System.Data.CommandType.Text;
            this.bdpUpdateCommand1.Connection = this.bdpConnection1;
            this.bdpUpdateCommand1.ParameterCount = ((short)(0));
            this.bdpUpdateCommand1.SchemaName = null;
            this.bdpUpdateCommand1.Transaction = null;
            this.bdpUpdateCommand1.UpdatedRowSource = System.Data.UpdateRowSource.None;
            // 
            // bdpDeleteCommand1
            // 
            this.bdpDeleteCommand1.CommandOptions = null;
            this.bdpDeleteCommand1.CommandText = "DELETE FROM MESTO WHERE mestoID = ? AND nazivMesta = ? AND postans" +  
                "kiFah = ?";
            this.bdpDeleteCommand1.CommandType = System.Data.CommandType.Text;
            this.bdpDeleteCommand1.Connection = this.bdpConnection1;
            this.bdpDeleteCommand1.ParameterCount = ((short)(0));
            this.bdpDeleteCommand1.SchemaName = null;
            this.bdpDeleteCommand1.Transaction = null;
            this.bdpDeleteCommand1.UpdatedRowSource = System.Data.UpdateRowSource.None;
            // 
            // bdpDataAdapter1
            // 
            this.bdpDataAdapter1.Active = true;
            this.bdpDataAdapter1.DataSet = this.dsMestoNetipski;
            this.bdpDataAdapter1.DataTable = this.tabMesto;
            this.bdpDataAdapter1.DeleteCommand = this.bdpDeleteCommand1;
            this.bdpDataAdapter1.InsertCommand = this.bdpInsertCommand1;
            this.bdpDataAdapter1.SelectCommand = this.bdpSelectCommand1;
            this.bdpDataAdapter1.StartRecord = 0;
            this.bdpDataAdapter1.UpdateCommand = this.bdpUpdateCommand1;
            // 
            // dsMestoNetipski
            // 
            this.dsMestoNetipski.DataSetName = "dsMestoNetipski";
            this.dsMestoNetipski.Locale = new System.Globalization.CultureInfo("sr-SP-Latn");
            this.dsMestoNetipski.Tables.AddRange(new System.Data.DataTable[] {
                        this.tabMesto});
            // 
            // tabMesto
            // 
            this.tabMesto.Columns.AddRange(new System.Data.DataColumn[] {
                        this.dcMestoID,
                        this.dcNazivMesta,
                        this.dcPostanskiFah});
            this.tabMesto.Constraints.AddRange(new System.Data.Constraint[] {
                        new System.Data.UniqueConstraint("Constraint1", new string[] {
                                    "mestoID"}, true),
                        new System.Data.UniqueConstraint("Constraint2", new string[] {
                                    "postanskiFah"}, false)});
            this.tabMesto.PrimaryKey = new System.Data.DataColumn[] {
                    this.dcMestoID};
            this.tabMesto.TableName = "MESTO";
            // 
            // dcMestoID
            // 
            this.dcMestoID.AllowDBNull = false;
            this.dcMestoID.ColumnName = "mestoID";
            this.dcMestoID.DataType = typeof(System.Data.SqlTypes.SqlGuid);
            // 
            // dcNazivMesta
            // 
            this.dcNazivMesta.AllowDBNull = false;
            this.dcNazivMesta.ColumnName = "nazivMesta";
            this.dcNazivMesta.DataType = typeof(System.Data.SqlTypes.SqlString);
            // 
            // dcPostanskiFah
            // 
            this.dcPostanskiFah.ColumnName = "postanskiFah";
            this.dcPostanskiFah.DataType = typeof(System.Data.SqlTypes.SqlInt64);
            ((System.ComponentModel.ISupportInitialize)(this.bdpDataAdapter1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.dsMestoNetipski)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.tabMesto)).EndInit();
        }

Ja koliko sa proverio sve je tu sto si mi rekao...Kazem ti, taj data set sam prevukao iz Tool Box-a na Design view komponente i u Object Inspector-u mu dodao kolone, naziv tabele, constraints (i jesam prvo stavio PK za mestoId, a posle Unique za postanskiFah) i zato mi nije jasno zasto ne sljaka...
[ aXi @ 04.08.2004. 12:17 ] @
Kao sto kazes ovo bi trebalo shljaka ;) te mora da je neka mega glupa greshka u pitanju ^_^ mrzim kad se meni tako nesto desava. Probaj da ovako dodelish vrednosti:

Code:

dsMestoNetipski.Tables[0].Rows.Add(new object[] {vrednost1, vrednost2, vrednost3});


Ako to ne reshi problem ovo sto ti je ace rekao je ql... izbaci privatne delove i shibni na mail; ovako se gadjamo necim skroz necitljivim... evo npr. moj => [email protected]; rado cu ti pomoci ;)

c-ya