» »

[c#] Problem z tabelo v datasetu - stetje zapisov

[c#] Problem z tabelo v datasetu - stetje zapisov

KernelPanic ::

Spostovani!

Spet bi potreboval vaso pomoc. Namrec, v aplikaciji, ki jo razvijam, imam dataset in znotraj njega 2 tabeli. Operacije nad prvo tabelo delujejo pravilno, z drugo tabelo pa imam sledec problem: Namrec, v tabeli bo samo en zapis, ki se bo ob vsakem branju statusa iz naprave, za katero delam komunikacijsko aplikacijo, prepisal z novimi vrednostmi. Trenutno je v tabeli en record in ob stavku
            if (this.m_datasetPinus.ACCULOAD_STATUS.Rows.Count <= 0)
            {
                // table is empty, add record

                drTargetRow = this.m_datasetPinus.ACCULOAD_STATUS.NewRow(); // setup new row
                this.m_datasetPinus.ACCULOAD_STATUS.Rows.Add(drTargetRow);    // adds created row into table
            }
            else
            {
                drTargetRow = this.m_datasetPinus.ACCULOAD_STATUS.Rows[0];  // get first record
                // table is not empty, update last (and only one) record
            }   // if
mi skoci v del kode, kjer bi moralal biti tabela prazna. Zakaj pogoj v if stavku narobe prebere stevilo recordov?

Dodal sem tudi testno kodo:
            // **** TEST CODE
            int iRowsTest1 = this.m_datasetPinus.Tables[1].Rows.Count;
            int iColumnsTest1 = this.m_datasetPinus.Tables[1].Columns.Count;

            int iRowsTest2 = this.m_datasetPinus.ACCULOAD_STATUS.Rows.Count;
            int iColumnTest2 = this.m_datasetPinus.ACCULOAD_STATUS.Columns.Count;
            // **** END OF TEST CODE - to be removed
, katere namen je presteti stolpce in vrstice. Stevilo stolpcev oba stavka prebereta pravilno, vrstice so pa venomer 0. Ni mi jasno zakaj, znorel bom!!! Po moje je kaksna trivialna napaka ...

S spostovanjem in vnaprej se vam zahvaljujem za pomoc,
M.

KernelPanic ::

Nihce ne ve?

SigmaProg ::

Debug pa poglej točno stanje, izvedi SQL v bazi in preveri kaj točno ti vrne (lahko da je dejansko 0 vrstic)....

KernelPanic ::

em probal, eno vrstico mi mssql vrne, ce grem nanj in z izvedem query...

Mitja Bonča ::

Vrne ti število 0 zato ker je tabela resnično prazna. Ker če bil bila v njej vsaj ena vrstca, bi ti sigutno vrnilo število večje od nič.
PS:Pa saj nič ne dodaš v tabelo, v prvem if stavku, ti samo dodaš prazno vrstico. Kaj pa daš v njo? Nič Poglej primer:
drTargetRow = this.m_datasetPinus.ACCULOAD_STATUS.NewRow(); // setup new row
drTarget["ColumnName"] = "Some value"; //dodaj to vrstico, in dodaj tvojo vrednost!
this.m_datasetPinus.ACCULOAD_STATUS.Rows.Add(drTargetRow);    // adds created row into table

KernelPanic ::

Mitja Bonča je izjavil:

Vrne ti število 0 zato ker je tabela resnično prazna. Ker če bil bila v njej vsaj ena vrstca, bi ti sigutno vrnilo število večje od nič.
PS:Pa saj nič ne dodaš v tabelo, v prvem if stavku, ti samo dodaš prazno vrstico. Kaj pa daš v njo? Nič Poglej primer:

drTargetRow = this.m_datasetPinus.ACCULOAD_STATUS.NewRow(); // setup new row
drTarget["ColumnName"] = "Some value"; //dodaj to vrstico, in dodaj tvojo vrednost!
this.m_datasetPinus.ACCULOAD_STATUS.Rows.Add(drTargetRow); // adds created row into table

Poglej, tabela je polna od prej!!! Z MSSql Administrator Managamenet Console gledam tabelo in notri je vrstica, cetudi je przna, bi rows.count moralo vrniti 1!!!! Samo da pridem v sluzbo, ti bom dokazal ... Torej, tukaj je celotna koda funkcije:
        void saveParametersToDatabase()
        {
            DataRow drTargetRow;    // target row
            double dNumber = 0;
            bool bOk = false;

            // **** TEST CODE
            //int iRowsTest1 = this.m_datasetPinus.Tables[1].Rows.Count;
            //int iColumnsTest1 = this.m_datasetPinus.Tables[1].Columns.Count;

            //int iRowsTest2 = this.m_datasetPinus.ACCULOAD_STATUS.Rows.Count;
            //int iColumnTest2 = this.m_datasetPinus.ACCULOAD_STATUS.Columns.Count;
            // **** END OF TEST CODE - to be removed

            if (this.m_datasetPinus.ACCULOAD_STATUS.Rows.Count <= 0)
            {
                // table is empty, add record

                drTargetRow = this.m_datasetPinus.ACCULOAD_STATUS.NewRow(); // setup new row
                this.m_datasetPinus.ACCULOAD_STATUS.Rows.Add(drTargetRow);    // adds created row into table
            }
            else
            {
                drTargetRow = this.m_datasetPinus.ACCULOAD_STATUS.Rows[0];  // get first record
                // table is not empty, update last (and only one) record
            }   // if

            // **** TRANSFER VALUES TO RECORD
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_SLAVE_ADDRESS] = this.m_aiAcculoadIIISlaveAddresses[0];

            bOk = this.m_CoreFunctions[0].readNonResetGross(ref dNumber);   // read non resettable gross
            if (!bOk)
                dNumber = 0;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_NON_RESET_GROSS] = dNumber;

            bOk = this.m_CoreFunctions[0].readNonResetNet(ref dNumber); // read non resettable net
            if (!bOk)
                dNumber = 0;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_NON_RESET_NET] = dNumber;

            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_BATCH_LOADED_GROSS] = 0;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_BATCH_LOADED_NET] = 0;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_FLOW_RATE_AVERAGE] = 0;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_TEMPERATURE] = 0;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_PRESET] = 0;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_ARM_PARKED] = this.m_iArmParked;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_GROUNDING] = this.m_iGrounding;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_OVERFILL] = this.m_iOverfill;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_CONDITIONS_PLC] = m_iConditionsPLC;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_ESD] = this.m_iESD;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_ALARM_PRESENT] = this.m_bwParams.m_bAlarmCondition;
            drTargetRow[AccuLoadIIIMonitor.TableStatus.FieldNames.
                FIELD_PRODUCT_FLOWING] = this.m_ssProductFlowing.m_bState;
            // **** END OF TRANSFER VALUES TO RECORD

            //int iRowsAffected = this.m_taAcculoadStatusTableAdapter.Update(this.m_datasetPinus); // updates table adapter
            this.m_datasetPinus.ACCULOAD_STATUS.AcceptChanges();
        }   // saveParametersToDatabase()
Torej, kot mi je narocil sef, ta tabela mora vsebovati samo en record in zato preverjam, ce je tabela prazna, ga dodam ce pa ni, bi pa rad spremenil vrednosti vrstice 0 (prve in edine vrstice v tabeli) in nato shranil spremembe.

Zgodovina sprememb…



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[VB] datagridview

Oddelek: Programiranje
351934 (1317) korenje3
»

[C#,SQL]

Oddelek: Programiranje
51238 (1151) JanOlMajti
»

c# - mssql kombinacija / problem pri zapisu row-a v bazo

Oddelek: Programiranje
121591 (1400) darkolord
»

Baza & c#

Oddelek: Programiranje
214154 (3212) xardas
»

c# vprasanje

Oddelek: Programiranje
171843 (1522) user4683

Več podobnih tem