Forum » Programiranje » [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
Dodal sem tudi testno kodo:
S spostovanjem in vnaprej se vam zahvaljujem za pomoc,
M.
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 } // ifmi 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.
- spremenil: KernelPanic ()
SigmaProg ::
Debug pa poglej točno stanje, izvedi SQL v bazi in preveri kaj točno ti vrne (lahko da je dejansko 0 vrstic)....
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:
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…
- spremenil: KernelPanic ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [VB] datagridviewOddelek: Programiranje | 1948 (1331) | korenje3 |
» | [C#,SQL]Oddelek: Programiranje | 1253 (1166) | JanOlMajti |
» | c# - mssql kombinacija / problem pri zapisu row-a v bazoOddelek: Programiranje | 1611 (1420) | darkolord |
» | Baza & c#Oddelek: Programiranje | 4172 (3230) | xardas |
» | c# vprasanjeOddelek: Programiranje | 1852 (1531) | user4683 |