System.Data.SQLite

Login
This project makes use of Eagle, provided by Mistachkin Systems.
Eagle: Secure Software Automation

Artifact 6646195e036b5701fb519e93d66e9c4666eaae7a:

Ticket change [6646195e03] - Ticket [4bbf851fa5] DBConcurrencyException status still Closed with 1 other change by mistachkin 2012-01-16 01:00:46.
D 2012-01-16T01:00:46.547
J comment DBConcurrencyException\r\n\r\nThis\sissue\sis\srelated\sto\sthe\sclosed\sticket\s[343d392b51]\r\nIn\sfact\sthe\sproblem\sstill\sremains.\sPlease\sread\sthe\sold\sticket\sfirst.\r\n\r\nAs\sa\sworkaround\sI\snow\sdo\snot\suse\sadapter.Update()\sany\slonger\s(as\sit\sraises\sthe\sexception).\r\nInstead\sof\r\n\r\nString\s\stable\s=\s“table”;\r\ntry\s{\r\nsql\s=\s"select\s*\sfrom\stable\swhere\s...";\r\nda\s=\snew\sSQLiteDataAdapter(sql,\sdb_con);\r\nda.Fill(ds,\stable);\r\ndt\s=\sds.Tables[table];\r\n…\r\nmanipulate_data();\s\r\nint\si\s=\sda.Update(dt);\s//\shere\sthe\sDBConcurrencyException\sraises\s!!!\s\r\n\r\nI\snow\suse\sa\sstupid\ssql.command\sin\sa\sloop.\r\n…\r\nString\ssql\s=\sString.Format("update\stable\sset\s…\s“\r\n\r\nSQLiteCommand\scmd\s=\snew\sSQLiteCommand(sql,\sdbconnection);\r\nreturn\scmd.ExecuteNonQuery();\r\n…\r\n\r\nThis\sworks,\sbut\sit\sdoes\snot\sperform\swell\sand\sit\sis\svery\sugly\scode.\r\n________________________________\s\r\n\r\nThe\sDBConcurrencyException\sraises\snot\son\severy\sadapter.Update()\sstatement.\sSometimes\sit\sworks,\ssometimes\snot.\sSometimes\sa\sfew\srecords\sare\supdated,\ssometimes\sjust\sonly\sone,\ssometimes\snone.\sSometimes\sit\sraises\son\sthis\stable,\ssometimes\son\sthe\sother\stable.\r\nAll\smy\stables\shave\sas\sa\sfirst\scolumn\sa\sDateTime\scolumn\s(“CHANGE_DATE”).\r\nIt\sdoes\snot\smatter\swhether\sI\sdo\r\nrow[“CHANGE_DATE”]\s=\sDateTime.Now;\r\nOr\r\nrow["CHANGE_DATE"]\s=\sDateTime.Now.Year\s+\s"-"\s+\sDateTime.Now.Month\s+\s"-"\s+\sDateTime.Now.Day\s+\s"\s"\s+\sDateTime.Now.TimeOfDay;\r\n\r\nregards,\r\nSimon\r\n\r\n<hr\s/><i>mistachkin\sadded\son\s2011-12-25\s23:31:09\sUTC:</i><br\s/>\r\nAre\syou\susing\sDateTimeFormat=JulianDay\sor\sUnixEpoch\sin\sthe\sconnection\sstring?\s\sThis\sis\snecessary\sto\stake\sadvantage\sof\sthe\sfix\sfor\sthe\sprevious\sticket\syou\smentioned.\r\n\r\n<hr\s/><i>anonymous\sadded\son\s2011-12-26\s23:23:14\sUTC:</i><br\s/>\r\nIf\sI\suse\s>\sDateTimeFormat=JulianDay\s<\sin\sthe\sconnectionstring\sthe\sstatement\r\n\r\n\s\sxydatetime\s=\sreader.GetDateTime(0);\r\n\r\nraises\san\sexception:\r\n\r\nTypeInitialisationException:\s\swrong\sformat\r\n_______\r\n\r\nString\ssql\s=\s"select\sCHANGE_DATE,\s...\s\s\s\s\sfrom\sTABLE\s..\s";\r\n\r\nSQLiteCommand\scmd\s=\snew\sSQLiteCommand(sql,\sdbconnection);\r\n\r\nSQLiteDataReader\sreader\s=\scmd.ExecuteReader();\r\n\r\n\sif\s(reader.HasRows)\r\n\s\s\s\s\swhile\s(reader.Read())\r\n\s\s\s\s\s{\r\n\s\s\s\s\s\s\s...\r\n\s\s\s\s\s\s\sxydatetime\s=\sreader.GetDateTime(0);\r\n\s\s\s\s\s\s\s...\r\n\r\n\s\s\s\s\s\s\s}\r\n\r\n\s\sreader.Close();\r\n\r\n\r\n<hr\s/><i>mistachkin\sadded\son\s2011-12-27\s03:24:15\sUTC:</i><br\s/>\r\nWhen\syou\suse\sthe\sJulianDay\sformat,\sthe\stype\sconversion\scode\sassumes\sthat\sdatabase\sfields\swith\sthe\stype\sDATETIME\s(or\sDATE,\setc)\swill\sactually\sbe\sa\sfloating\spoint\snumber.\s\sLikewise,\swhen\syou\suse\sthe\sUnixEpoch\sformat,\sit\sassumes\sthat\sdatabase\sfields\swith\sthe\stype\sDATETIME\swill\sactually\sbe\san\sinteger\snumber\sof\sseconds\ssince\sthe\sUnix\sepoch.\r\n\r\n\r\n<hr\s/><i>anonymous\sadded\son\s2011-12-27\s17:54:42\sUTC:</i><br\s/>\r\nconnection\sstring\scontains\s>\sDateTimeFormat=JulianDay\s<\r\n\r\nthe\sfollowing\scode\sraises\sSystem.FormatException:\r\n\r\nString\sSql\s=\s"Select\sCHANGE_DATE,\s…\sfrom\stable\s..”;\r\n\s\r\nda\s=\snew\sSQLiteDataAdapter(sql,\sdbconnection);\r\n\r\nda.Fill(dset,\stable);\r\n\r\nThe\scolumn\sCHANGE_DATE\sis\sof\stype\sDATETIME.\r\n\r\n<hr\s/><i>anonymous\sadded\son\s2011-12-28\s00:06:25\sUTC:</i><br\s/>\r\nWhy\sdid\syou\sclose\sthis\sticket\s?\r\n\r\n<hr\s/><i>mistachkin\sadded\son\s2011-12-28\s05:07:57\sUTC:</i><br\s/>\r\nBecause\sthe\sbehavior\syou\sappear\sto\sdescribe\sis\snot\sa\sbug.\s\sWhen\susing\sthe\sUnixEpoch\sor\sJulianDay\sformats\sin\sthe\sconnection\sstring,\sthe\sunderlying\sdata\sin\sthe\sdatabase\sitself\smust\sbe\sof\sthe\stype\sexpected\sby\sthe\stype\sconversion\scode\sin\sSystem.Data.SQLite.\s\sFor\sUnixEpoch,\sit\smust\sbe\san\sinteger.\s\sFor\sJulianDay,\sit\smust\sbe\sa\sdouble-precision\sfloating-point\snumber.\r\n\r\n<hr\s/><i>anonymous\sadded\son\s2011-12-28\s09:43:43\sUTC:</i><br\s/>\r\nDoes\sthat\smean\sthat\sI\scan't\suse\scolumns\sof\stype\sDatTime\s?\r\nJust\sto\suse\sthe\sDateTimeFormat=JulianDay\sdoes\snot\sconvert\sthe\sunderlying\sdata\sin\sthe\sdatabase.\sRight\s?\sDo\sI\shave\sto\sconvert\sthe\sdata\sin\sthe\sdatabase\sfirst\sbefore\sworking\son\sit\s?\r\n\r\n<hr\s/><i>mistachkin\sadded\son\s2011-12-29\s01:43:17\sUTC:</i><br\s/>\r\nEffectively,\syes.\s\sThe\sDateTimeFormat\sproperty\sof\sthe\sconnection\sstring\scontrols\show\sSystem.Data.SQLite\sattempts\sto\s*interpret*\sthe\sactual\sdata.\s\sIf\syou\swant\sto\suse\sJulianDay\sor\sUnixEpoch\s(or\sTicks),\sthe\sactual\sdata\sin\sthe\sdatabase\smust\sbe\schanged\sfirst.\s\sAlternatively,\syou\scan\suse\sISO8601\sif\syour\sDateTime\sstrings\smatch\sone\sof\sthe\ssupported\sformat\sstrings.\r\n\r\n<hr\s/><i>anonymous\sadded\son\s2012-01-14\s00:01:19\sUTC:</i><br\s/>\r\nthis\sissue\sis\sdrivin\sme\snuts\r\n\r\nI\stried:\r\n\r\nfirst\sversion\r\n\r\nconnectionstring:\s\s\sDateTimeFormat=\sJulianDay\r\n\r\ntable\sproduct:\r\n\r\nchange_date\s\sdatetime,\r\nprice\snumber,\r\nname\svarchar2,\r\nid\sinteger\r\n\r\nfirstly,\sI\sdid:\r\n\r\nupdate\sproduct\sset\schange_date\s=\s2455928.0\s\s\s\s//which\sis\s2012-01-01\s12:00:00\r\n\r\nthen:\r\n\r\nsql\s=\s“select\schange_date,\sid,\sname,\sprice\sfrom\sproduct”;\r\n\r\nadapter\s=\s\snew\sSQLiteDataAdapter(sql,\sdb_con);\r\n\r\nadapter.Fill(ds,\sdatatab);\r\n\r\n….\r\n\r\nrow[“price”]\s\s+=\s1;\r\n\r\nrow[“change_date”]\s\s=\s\sDateTime.Now;\r\n\r\n….\r\n\r\nadapter.update(datatab);\s\s\s\s\s<-\shere\sthe\sDBConcurrencyException\sraises\r\n\r\n_______________________________________________\s\s\s\r\n\r\nsecond\sversion:\r\n\r\nsame\stable;\r\n\r\nconnectionString:\s\s\s\s\sDateTimeFormat=\sJulianDay\r\n\r\nupdate\sproduct\sset\schange_date\s=\s2455928.0\s\s\s\s//which\sis\s2012-01-01\s12:00:00\r\n\r\nthen\r\n\r\n!!\sdifference\s!!\r\n\r\nsql\s=\s“select\sjulianday(change_date)\sas\schange_date,\sid,\sname,\sprice\sfrom\sproduct”;\r\n\r\nadapter\s=\s\snew\sSQLiteDataAdapter(sql,\sdb_con);\r\n\r\nadapter.Fill(ds,\sdatatab);\r\n\r\n….\r\n\r\nrow[“price”]\s\s+=\s1.0;\r\n\r\n//\sin\sfact\snow\sthe\scolumn\sis\sof\stype\sSystem.Double\r\n\r\nrow[“change_date”]\s\s=\s\s(double)row[“change_date”]\s\s+\s1.0;\r\n\r\n….\r\n\r\nadapter.update(datatab);\r\n\r\nno\sexception\sraises,\sbut\swhat\shappens\sis:\r\n\r\nthe\sprice\scolumn\sis\supdated,\sthe\sDateTime-Column\sis\snot\s\s!\r\n\r\nWhat's\swrong\s?\r\n\r\n\r\n<hr\s/><i>mistachkin\sadded\son\s2012-01-14\s03:00:45\sUTC:</i><br\s/>\r\n<verbatim>\r\nInstead\sof:\r\n\r\nrow["change_date"]\s=\sDateTime.Now;\r\n\r\nTry:\r\n\r\nrow["change_date"]\s=\sSQLiteConvert.ToJulianDay(DateTime.Now);\r\n</verbatim>\r\n\r\n\r\n<hr\s/><i>anonymous\sadded\son\s2012-01-14\s14:27:33\sUTC:</i><br\s/>\r\nrow["change_date"]\s=\sSQLiteConvert.ToJulianDay(DateTime.Now);\r\n\r\n=>\scompiler\ssays:\r\n\r\nAn\sobject\sreference\sis\srequired\sfor\sthe\snon-static\sfield,\smethod,\sor\sproperty\s'System.Data.SQLite.SQLiteConvert.ToJulianDay(System.DateTime)'\r\n\r\n<hr\s/><i>mistachkin\sadded\son\s2012-01-15\s01:01:22\sUTC:</i><br\s/>\r\nOk,\sthat\sis\san\sissue\sbecause\sthose\stype\sconversion\smethods\sshould\sbe\sstatic\sas\sthey\sdo\snot\sneed\sany\sinstance\sdata.\r\n\r\n<hr\s/><i>mistachkin\sadded\son\s2012-01-15\s01:28:17\sUTC:</i><br\s/>\r\nChanged\sto\sstatic\sby\scheck-in\s[114024ffe7],\swith\stests.\r\n\r\n\r\n<hr\s/><i>anonymous\sadded\son\s2012-01-15\s19:04:07\sUTC:</i><br\s/>\r\nconnectionstring:\sDateTimeFormat=\sJulianDay\r\n\r\nupdate\sproduct\sset\schange_date\s=\s2455928.0\s\s\s\s//\swhich\sis\s2012-01-01\s12:00:00\r\n\r\nchange_date\sis\sof\stype\sDateTime\s!\r\n\r\n----------------\s\r\n\r\nsql\s=\s“select\schange_date,\sprice,\s....”;\r\n\r\nadapter\s=\snew\sSQLiteDataAdapter(sql,\sdb_con);\r\n\r\nadapter.Fill(ds,\sdatatab);\r\n\r\n….\r\n\r\nrow[[price]]\s+=\s1;\r\n\r\nrow[[change_date]]\s=\sSQLiteConvert.ToJulianDay(DateTime.Now);\s\s\s\s\s\s<-\s\r\n\r\nTypeConverionException\sraises,\r\n\r\nwhich\sis\sclear,\sbecause:\r\n\r\nthe\soriginal\sSQLite\stable-column\sis\sof\stype\sDateTime,\r\nthen\sthe\sADO-table\sis\salso\sof\stype\sSystem.DateTime,\sto\swhich\swe\swant\sto\sassign\sa\sdouble.\r\n\r\nSystem.ArgumentException:\sinvalid\stype\sconversion\s"Double"\sto\s"DateTime".<2455941,93204139>\scannot\sbe\ssaved\sto\sCHANGE_DATE\scolumn.\r\nExpected\stype:\sDateTime.\s--->\sSystem.InvalidCastException:\sinvalid\sconversion\s"Double"\sto\s"DateTime".\r\n\r\n\r\n<hr\s/><i>mistachkin\sadded\son\s2012-01-16\s01:00:09\sUTC:</i><br\s/>\r\nI\sforgot\sthat\sthe\snecessary\sconversions\shappen\sinternally.\s\sHere\sis\san\s<a\shref="/index.html/artifact?ci=tip&filename=Tests/tkt-343d392b51.eagle&ln=195-297">example</a>.
K 4bbf851fa5b26c1ca74a102731942f99ba8aa18e
U mistachkin
Z a51733d022243e216c2b7f3235a2c989