Forum » Programiranje » c# - mssql kombinacija / problem pri zapisu row-a v bazo
c# - mssql kombinacija / problem pri zapisu row-a v bazo
KernelPanic ::
Spostovani!
Imam sledec problem:
Imam tabelo z 110 fieldi, katere zgolj namen je hranjenje log zapisa dogodkov v napravi, iz katere podatke (teh 110 podatkov) berem. Opravka imam z tremi tipi podatkov:
- string
- double
- float
Iz naprave preberem vse podatke pravilno in ko hocem shraniti z TableAdapter.Update, se vsi podatki pravilno zapisejo v bazo, razen podatkov tipa float. Mi lahko podate kaksne nasvete, kaj bi bilo lahko narobe. Tabelo v bazi, ki sem jo skreiral, sem pregledal po dolgem in pocez in ni napak (vsaj mislim tako ). Tip string sem mapiral v nchar[255], tip double sem mapiral v float(53) in tip float sem mapiral v tip real, vendar podatki tipa float se vedno niso zapisani v bazi. Kaj bi bilo lahko narobe?
Vnaprej se vam zahvaljujem za vaso pomoc in s spostovanjem,
M.
Imam sledec problem:
Imam tabelo z 110 fieldi, katere zgolj namen je hranjenje log zapisa dogodkov v napravi, iz katere podatke (teh 110 podatkov) berem. Opravka imam z tremi tipi podatkov:
- string
- double
- float
Iz naprave preberem vse podatke pravilno in ko hocem shraniti z TableAdapter.Update, se vsi podatki pravilno zapisejo v bazo, razen podatkov tipa float. Mi lahko podate kaksne nasvete, kaj bi bilo lahko narobe. Tabelo v bazi, ki sem jo skreiral, sem pregledal po dolgem in pocez in ni napak (vsaj mislim tako ). Tip string sem mapiral v nchar[255], tip double sem mapiral v float(53) in tip float sem mapiral v tip real, vendar podatki tipa float se vedno niso zapisani v bazi. Kaj bi bilo lahko narobe?
Vnaprej se vam zahvaljujem za vaso pomoc in s spostovanjem,
M.
KernelPanic ::
podatki, ki jih preberem iz naprave, so tocni, tudi ko naredim float iz 4ih bajtov, je vse ok, saj je dobljena vrednost 15.0 (stopinj) enaka izmerjeni temperaturi sonde, iz katere preko te naprave berem temperaturo. Nikakor pa tega podatka (float fAverageTemperature=15.0;) ne morem zapisati niti v float(1) stolpec, niti v float(53) stolpec in niti v real stolpec, vedno je vrednost NULL, ko odprem tabelo v MS SQL Server Management Console. Kaj bi bilo lahko narobe, pocasi obupujem, ker jutri zjutraj to mora delati ...
dolenc ::
Prilepi še kako sestaviš komando, ki jo uporabiš, mogoče si pa tip podatka pri parametru napačno nastavil(tist DbType).
KernelPanic ::
Koda je tukaj, ker je veliko podatkov, je funkcija ogromna, bom pa izpisal naprimer samo tiste tipe, ki ne delajo:
private void addTransactionToDatabase(int iTransactionId) { const int iBufferInSize = 0; // initial input buffer size bool bOk = false; // operation success flag short[] bufferIn = new short[iBufferInSize]; DataRow drTargetRow; // db datarow short[] floatNumberToConvert = new short[2]; // for reading float values short[] doubleNumberToConvert = new short[4]; // for reading double values bOk = this.m_CoreFunctions[0].readTransactionLog(iTransactionId, ref bufferIn); drTargetRow = this.m_datasetPinus.ACCULOAD_TRANSACTIONS.NewRow(); // **** FIELDS SETUP drTargetRow[AccuLoadIIIMonitor.TransactionTable. FieldNames.FIELD_TR_ID] = iTransactionId; // **** NUMBER OF BATCHES DELIVERED COMPOSITION drTargetRow[AccuLoadIIIMonitor.TransactionTable. FieldNames.FIELD_NR_BATCHES_DELIVERED] = bufferIn[1]; // **** END OF NUMBER OF BATCHES DELIVERED COMPOSITION // **** TIMESTAMP COMPOSITION DateTime dtTransactionTimeStamp = new DateTime(bufferIn[2], bufferIn[3], bufferIn[4], 0, bufferIn[8], bufferIn[7], bufferIn[6], 0); drTargetRow[AccuLoadIIIMonitor.TransactionTable. FieldNames.FIELD_TR_TIME_STAMP] = dtTransactionTimeStamp; // **** END OF TIMESTAMP COMPOSITION // **** PROMPT RESPOSNES COMPOSITION // TODO: add msbs drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_PR_RESPONSE1] = bufferIn[10]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_PR_RESPONSE2] = bufferIn[12]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_PR_RESPONSE3] = bufferIn[14]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_PR_RESPONSE4] = bufferIn[16]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_PR_RESPONSE5] = bufferIn[18]; // **** END OF PROMPT RESPOSNES COMPOSITION // **** TRANSACTION ALARMS COMPOSITION drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_TR_NUMBER_OF_ALARMS] = bufferIn[20]; // **** END OF TRANSACTION ALARMS COMPOSITION // **** AVERAGE METER FACTOR COMPOSITION floatNumberToConvert[0]=bufferIn[122]; floatNumberToConvert[1]=bufferIn[121]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_TR_AVERAGE_METER_FACTOR] = this.m_CoreFunctions[0].composeFloat(floatNumberToConvert); // **** END OF AVERAGE METER FACTOR COMPOSITION // **** AVERAGE TEMPERATURE COMPOSITION floatNumberToConvert[0] = bufferIn[124]; floatNumberToConvert[1] = bufferIn[123]; //System.Single fAverageTemperature = this.m_CoreFunctions[0].composeFloat(floatNumberToConvert); drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_TR_AVERAGE_TEMPERATURE] = this.m_CoreFunctions[0].composeFloat(floatNumberToConvert);/*fAverageTemperature;*/ // **** END OF AVERAGE TEMEPRATURE COMPOSITION // **** AVERAGE DENSITY COMPOSITION floatNumberToConvert[0] = bufferIn[126]; floatNumberToConvert[1] = bufferIn[125]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_TR_AVERAGE_DENSITY] = this.m_CoreFunctions[0].composeFloat(floatNumberToConvert); // **** END OF AVERAGE DENSITY COMPOSITION // **** AVERAGE PRESSURE COMPOSITION floatNumberToConvert[0] = bufferIn[128]; floatNumberToConvert[1] = bufferIn[127]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_TR_AVERAGE_PRESSURE] = this.m_CoreFunctions[0].composeFloat(floatNumberToConvert); // **** END OF AVERAGE PRESSURE COMPOSITION // **** AVERAGE CTL COMPOSITION floatNumberToConvert[0] = bufferIn[130]; floatNumberToConvert[1] = bufferIn[129]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_TR_AVERAGE_CTL] = this.m_CoreFunctions[0].composeFloat(floatNumberToConvert); // **** END OF AVERAGE CTL COMPOSITION // **** AVERAGE CPL COMPOSITION floatNumberToConvert[0] = bufferIn[132]; floatNumberToConvert[1] = bufferIn[131]; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_TR_AVERAGE_CPL] = this.m_CoreFunctions[0].composeFloat(floatNumberToConvert); // **** END OF AVERAGE CPL COMPOSITION // **** TRANSACTION ADDITIVE 1 VOLUME COMPOSITION doubleNumberToConvert[0] = 136; doubleNumberToConvert[1] = 135; doubleNumberToConvert[2] = 134; doubleNumberToConvert[3] = 133; drTargetRow[AccuLoadIIIMonitor.TransactionTable.FieldNames. FIELD_TR_ADDITIVE1_VOLUME] = this.m_CoreFunctions[0].composeDouble(doubleNumberToConvert); // **** END OF TRANSACTION ADDITIVE 1 VOLUME COMPOSITION // **** END OF FIELDS SETUP this.m_datasetPinus.ACCULOAD_TRANSACTIONS.Rows.Add(drTargetRow); // adds created row into table int iSuccess = this.m_taPinus.Update(this.m_datasetPinus); // updates table adapter } // addTransactionToDatabaseTorej, v zgornji kodi se v bazo pravilno zapisejo podatki tipa string in podatki tipa double. Zakaj float ne?
KernelPanic ::
Ok, zbrisal sem dataset in ga postavil na novo in sedaj mi zapisuje vrednosti (WTF?!) brez problemov. Se vedno pa ostaja sledec problem: V tabeli imam 1 zapis (row), kar nonstop preverjam z mssql server managamenet studio, vendar mi v zgornji funkciji vrstica:
try { //iNumberOfRows = this.m_datasetPinus.ACCULOAD_STATUS.Count(); drTargetRow = this.m_datasetPinus.ACCULOAD_STATUS.Rows[0]; // get first record } catch (IndexOutOfRangeException ex) { // table is emptyse vedno mece exception, kot da je tabela prazna. V cem je fora???
KernelPanic ::
Sedaj sem na mssql serverju vtipkal query, ki vraca stevilo recordov v tabeli in dobim mi vrne vrednost 1, tako, kot mora:
SELECT COUNT(*) FROM dbo.ACCULOAD_STATUS;
Mitja Bonča ::
Za predzadnji post: če ti meče ven error, to pomeni da tabela nima zapisov, v tabeli ni nobene vrstice z podatki, ker če bi bili, bi ta koda morala delati:
Primer:
Ta koda deluje 100%.
-------------------------------------
Zadnj post:
"Get row count from SqlCommand" deluje, stavek je pravilen. Tako da bi dataTable (oz. DataSet določene tabele).
Ker imaš neka svoja imena, nevem točno kaj je DataSet in kaj je DataTable (default imena), zato preveri svojo kodo, če imaš tako kot jaz.
Primer:
DataSet ds = new DataSet(); DataTable table = new DataTable("myTable"); ds.Tables.Add(table); table.Columns.Add("column1", typeof(int)); table.Columns.Add("column2", typeof(string)); table.Rows.Add(1, "item 1"); DataRow rows = ds.Tables["myTable"].Rows[0];
Ta koda deluje 100%.
-------------------------------------
Zadnj post:
"Get row count from SqlCommand" deluje, stavek je pravilen. Tako da bi dataTable (oz. DataSet določene tabele).
Ker imaš neka svoja imena, nevem točno kaj je DataSet in kaj je DataTable (default imena), zato preveri svojo kodo, če imaš tako kot jaz.
KernelPanic ::
Mitja Bonča je izjavil:
Za predzadnji post: če ti meče ven error, to pomeni da tabela nima zapisov, v tabeli ni nobene vrstice z podatki, ker če bi bili, bi ta koda morala delati:
Primer:
DataSet ds = new DataSet();
DataTable table = new DataTable("myTable");
ds.Tables.Add(table);
table.Columns.Add("column1", typeof(int));
table.Columns.Add("column2", typeof(string));
table.Rows.Add(1, "item 1");
DataRow rows = ds.Tables["myTable"].Rows[0];
Ta koda deluje 100%.
-------------------------------------
Zadnj post:
"Get row count from SqlCommand" deluje, stavek je pravilen. Tako da bi dataTable (oz. DataSet določene tabele).
Ker imaš neka svoja imena, nevem točno kaj je DataSet in kaj je DataTable (default imena), zato preveri svojo kodo, če imaš tako kot jaz.
Lej, problem je, da v mssql serverju v tabeli JE EN ZAPIS, v kodi mi pa vztrajno kaze, da je tabela prazna in ne vem vec, kaj naj storim!!!
darkolord ::
Če nekaj zapišeš v bazo in takoj za tem (brez ugašanja program) v kodi preveriš, če je kaj v tabeli, ti še zmeraj kaže, da je prazno?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c#] Vprasanje glede eventovOddelek: Programiranje | 1383 (1097) | Looooooka |
» | DataView, DataTable, DataSetOddelek: Programiranje | 1152 (903) | detroit |
» | [C#] ne dodaja podatkov v bazoOddelek: Programiranje | 1576 (1425) | alesp56 |
» | razložitev nekaterij elementov v visual studio 05Oddelek: Programiranje | 2101 (1906) | darkolord |
» | [ C ] floating point not loaded !!?Oddelek: Programiranje | 1550 (1483) | Fizikalko |