OdbcParameterTest.cs 151 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363
  1. // OdbcCommandTest.cs - NUnit Test Cases for testing the
  2. // OdbcCommand class
  3. //
  4. // Authors:
  5. // Sureshkumar T ([email protected])
  6. // Gert Driesen ([email protected])
  7. //
  8. // Copyright (c) 2005-2008 Novell Inc., and the individuals listed
  9. // on the ChangeLog entries.
  10. //
  11. // Permission is hereby granted, free of charge, to any person obtaining
  12. // a copy of this software and associated documentation files (the
  13. // "Software"), to deal in the Software without restriction, including
  14. // without limitation the rights to use, copy, modify, merge, publish,
  15. // distribute, sublicense, and/or sell copies of the Software, and to
  16. // permit persons to whom the Software is furnished to do so, subject to
  17. // the following conditions:
  18. //
  19. // The above copyright notice and this permission notice shall be
  20. // included in all copies or substantial portions of the Software.
  21. //
  22. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  23. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  24. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  25. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  26. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  27. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29. //
  30. using System;
  31. using System.Data;
  32. using System.Data.Common;
  33. using System.Data.Odbc;
  34. using System.Globalization;
  35. using System.Text;
  36. using System.Threading;
  37. using Mono.Data;
  38. using NUnit.Framework;
  39. namespace MonoTests.System.Data
  40. {
  41. [TestFixture]
  42. [Category ("odbc")]
  43. public class OdbcParameterTest
  44. {
  45. private CultureInfo _originalCulture;
  46. [SetUp]
  47. public void Setup ()
  48. {
  49. _originalCulture = Thread.CurrentThread.CurrentCulture;
  50. Thread.CurrentThread.CurrentCulture = new CultureInfo ("nl-BE");
  51. }
  52. [TearDown]
  53. public void TearDown ()
  54. {
  55. Thread.CurrentThread.CurrentCulture = _originalCulture;
  56. }
  57. [Test]
  58. public void IntegerParamTest ()
  59. {
  60. string insert_data = "insert into numeric_family (id, type_int) values (6000, ?)";
  61. string select_data = "select id, type_int from numeric_family where type_int = ? and id = ?";
  62. string select_by_id = "select id, type_int from numeric_family where id = ?";
  63. string delete_data = "delete from numeric_family where id = 6000";
  64. IDbConnection conn = ConnectionManager.Singleton.Connection;
  65. conn.Open ();
  66. IDataReader dr = null;
  67. OdbcCommand cmd = null;
  68. OdbcParameter param;
  69. try {
  70. cmd = (OdbcCommand) conn.CreateCommand ();
  71. cmd.CommandText = select_data;
  72. param = cmd.Parameters.Add ("type_int", OdbcType.Int);
  73. param.Value = int.MaxValue;
  74. param = cmd.Parameters.Add ("id", OdbcType.Int);
  75. param.Value = 1;
  76. dr = cmd.ExecuteReader ();
  77. Assert.IsTrue (dr.Read (), "#A1");
  78. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  79. Assert.AreEqual (1, dr.GetValue (0), "#A2");
  80. Assert.AreEqual (typeof (int), dr.GetFieldType (1), "#A3");
  81. Assert.AreEqual (int.MaxValue, dr.GetValue (1), "#A4");
  82. Assert.IsFalse (dr.Read (), "#A5");
  83. dr.Close ();
  84. cmd.Dispose ();
  85. cmd = (OdbcCommand) conn.CreateCommand ();
  86. cmd.CommandText = select_data;
  87. param = cmd.Parameters.Add ("type_int", OdbcType.Int);
  88. param.Value = int.MinValue;
  89. param = cmd.Parameters.Add ("id", OdbcType.Int);
  90. param.Value = 2;
  91. dr = cmd.ExecuteReader ();
  92. Assert.IsTrue (dr.Read (), "#B1");
  93. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  94. Assert.AreEqual (2, dr.GetValue (0), "#B2");
  95. Assert.AreEqual (typeof (int), dr.GetFieldType (1), "#B3");
  96. Assert.AreEqual (int.MinValue, dr.GetValue (1), "#B4");
  97. Assert.IsFalse (dr.Read (), "#B5");
  98. dr.Close ();
  99. cmd.Dispose ();
  100. cmd = (OdbcCommand) conn.CreateCommand ();
  101. cmd.CommandText = select_data;
  102. param = cmd.Parameters.Add ("type_int", OdbcType.Int);
  103. param.Value = 0;
  104. param = cmd.Parameters.Add ("id", OdbcType.Int);
  105. param.Value = 3;
  106. dr = cmd.ExecuteReader ();
  107. Assert.IsTrue (dr.Read (), "#C1");
  108. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  109. Assert.AreEqual (3, dr.GetValue (0), "#C2");
  110. Assert.AreEqual (typeof (int), dr.GetFieldType (1), "#C3");
  111. Assert.AreEqual (0, dr.GetValue (1), "#C4");
  112. Assert.IsFalse (dr.Read (), "#C5");
  113. dr.Close ();
  114. cmd.Dispose ();
  115. cmd = (OdbcCommand) conn.CreateCommand ();
  116. cmd.CommandText = select_by_id;
  117. param = cmd.Parameters.Add ("id", OdbcType.Int);
  118. param.Value = 4;
  119. dr = cmd.ExecuteReader ();
  120. Assert.IsTrue (dr.Read (), "#D1");
  121. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  122. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  123. Assert.AreEqual (typeof (int), dr.GetFieldType (1), "#D4");
  124. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  125. Assert.IsFalse (dr.Read (), "#D6");
  126. dr.Close ();
  127. cmd.Dispose ();
  128. cmd = (OdbcCommand) conn.CreateCommand ();
  129. cmd.CommandText = insert_data;
  130. param = cmd.Parameters.Add ("type_int", OdbcType.Int);
  131. param.Value = int.MaxValue;
  132. cmd.ExecuteNonQuery ();
  133. cmd.Dispose ();
  134. cmd = (OdbcCommand) conn.CreateCommand ();
  135. cmd.CommandText = select_by_id;
  136. param = cmd.Parameters.Add ("id", OdbcType.Int);
  137. param.Value = 6000;
  138. dr = cmd.ExecuteReader ();
  139. Assert.IsTrue (dr.Read (), "#E1");
  140. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  141. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  142. Assert.AreEqual (typeof (int), dr.GetFieldType (1), "#E4");
  143. Assert.AreEqual (int.MaxValue, dr.GetValue (1), "#E5");
  144. Assert.IsFalse (dr.Read (), "#E6");
  145. dr.Close ();
  146. cmd.Dispose ();
  147. DBHelper.ExecuteNonQuery (conn, delete_data);
  148. cmd = (OdbcCommand) conn.CreateCommand ();
  149. cmd.CommandText = insert_data;
  150. param = cmd.Parameters.Add ("type_int", OdbcType.Int);
  151. param.Value = int.MinValue;
  152. cmd.ExecuteNonQuery ();
  153. cmd.Dispose ();
  154. cmd = (OdbcCommand) conn.CreateCommand ();
  155. cmd.CommandText = select_by_id;
  156. param = cmd.Parameters.Add ("id", OdbcType.Int);
  157. param.Value = 6000;
  158. dr = cmd.ExecuteReader ();
  159. Assert.IsTrue (dr.Read (), "#F1");
  160. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  161. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  162. Assert.AreEqual (typeof (int), dr.GetFieldType (1), "#F4");
  163. Assert.AreEqual (int.MinValue, dr.GetValue (1), "#F5");
  164. Assert.IsFalse (dr.Read (), "#F6");
  165. dr.Close ();
  166. cmd.Dispose ();
  167. DBHelper.ExecuteNonQuery (conn, delete_data);
  168. cmd = (OdbcCommand) conn.CreateCommand ();
  169. cmd.CommandText = insert_data;
  170. param = cmd.Parameters.Add ("type_int", OdbcType.Int);
  171. param.Value = 0;
  172. cmd.ExecuteNonQuery ();
  173. cmd.Dispose ();
  174. cmd = (OdbcCommand) conn.CreateCommand ();
  175. cmd.CommandText = select_by_id;
  176. param = cmd.Parameters.Add ("id", OdbcType.Int);
  177. param.Value = 6000;
  178. dr = cmd.ExecuteReader ();
  179. Assert.IsTrue (dr.Read (), "#G1");
  180. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  181. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  182. Assert.AreEqual (typeof (int), dr.GetFieldType (1), "#G4");
  183. Assert.AreEqual (0, dr.GetValue (1), "#G5");
  184. Assert.IsFalse (dr.Read (), "#G6");
  185. dr.Close ();
  186. cmd.Dispose ();
  187. DBHelper.ExecuteNonQuery (conn, delete_data);
  188. cmd = (OdbcCommand) conn.CreateCommand ();
  189. cmd.CommandText = insert_data;
  190. param = cmd.Parameters.Add ("type_int", OdbcType.Int);
  191. param.Value = DBNull.Value;
  192. cmd.ExecuteNonQuery ();
  193. cmd.Dispose ();
  194. cmd = (OdbcCommand) conn.CreateCommand ();
  195. cmd.CommandText = select_by_id;
  196. param = cmd.Parameters.Add ("id", OdbcType.Int);
  197. param.Value = 6000;
  198. dr = cmd.ExecuteReader ();
  199. Assert.IsTrue (dr.Read (), "#H1");
  200. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  201. Assert.AreEqual (6000, dr.GetValue (0), "#H3");
  202. Assert.AreEqual (typeof (int), dr.GetFieldType (1), "#H4");
  203. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#H5");
  204. Assert.IsFalse (dr.Read (), "#H6");
  205. dr.Close ();
  206. cmd.Dispose ();
  207. } finally {
  208. if (dr != null)
  209. dr.Close ();
  210. if (cmd != null)
  211. cmd.Dispose ();
  212. conn.Close ();
  213. conn.Open ();
  214. DBHelper.ExecuteNonQuery (conn, delete_data);
  215. conn.Close ();
  216. }
  217. }
  218. [Test]
  219. public void BigIntParamTest ()
  220. {
  221. string insert_data = "insert into numeric_family (id, type_bigint) values (6000, ?)";
  222. string select_data = "select id, type_bigint from numeric_family where type_bigint = ? and id = ?";
  223. string select_by_id = "select id, type_bigint from numeric_family where id = ?";
  224. string delete_data = "delete from numeric_family where id = 6000";
  225. IDbConnection conn = ConnectionManager.Singleton.Connection;
  226. conn.Open ();
  227. IDataReader dr = null;
  228. OdbcCommand cmd = null;
  229. OdbcParameter param;
  230. try {
  231. cmd = (OdbcCommand) conn.CreateCommand ();
  232. cmd.CommandText = select_data;
  233. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  234. param.Value = 9223372036854775807L;
  235. param = cmd.Parameters.Add ("id", OdbcType.Int);
  236. param.Value = 1;
  237. dr = cmd.ExecuteReader ();
  238. Assert.IsTrue (dr.Read (), "#A1");
  239. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  240. Assert.AreEqual (1, dr.GetValue (0), "#A3");
  241. Assert.AreEqual (typeof (long), dr.GetFieldType (1), "#A4");
  242. Assert.AreEqual (9223372036854775807L, dr.GetValue (1), "#A5");
  243. Assert.IsFalse (dr.Read (), "#A6");
  244. dr.Close ();
  245. cmd.Dispose ();
  246. cmd = (OdbcCommand) conn.CreateCommand ();
  247. cmd.CommandText = select_data;
  248. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  249. param.Value = -9223372036854775808L;
  250. param = cmd.Parameters.Add ("id", OdbcType.Int);
  251. param.Value = 2;
  252. dr = cmd.ExecuteReader ();
  253. Assert.IsTrue (dr.Read (), "#A1");
  254. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  255. Assert.AreEqual (2, dr.GetValue (0), "#B3");
  256. Assert.AreEqual (typeof (long), dr.GetFieldType (1), "#B4");
  257. Assert.AreEqual (-9223372036854775808L, dr.GetValue (1), "#B5");
  258. Assert.IsFalse (dr.Read (), "#B6");
  259. dr.Close ();
  260. cmd.Dispose ();
  261. cmd = (OdbcCommand) conn.CreateCommand ();
  262. cmd.CommandText = select_data;
  263. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  264. param.Value = 0L;
  265. param = cmd.Parameters.Add ("id", OdbcType.Int);
  266. param.Value = 3;
  267. dr = cmd.ExecuteReader ();
  268. Assert.IsTrue (dr.Read (), "#C1");
  269. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  270. Assert.AreEqual (3, dr.GetValue (0), "#C3");
  271. Assert.AreEqual (typeof (long), dr.GetFieldType (1), "#C4");
  272. Assert.AreEqual (0L, dr.GetValue (1), "#C5");
  273. Assert.IsFalse (dr.Read (), "#C6");
  274. dr.Close ();
  275. cmd.Dispose ();
  276. cmd = (OdbcCommand) conn.CreateCommand ();
  277. cmd.CommandText = select_by_id;
  278. param = cmd.Parameters.Add ("id", OdbcType.Int);
  279. param.Value = 4;
  280. dr = cmd.ExecuteReader ();
  281. Assert.IsTrue (dr.Read (), "#D1");
  282. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  283. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  284. Assert.AreEqual (typeof (long), dr.GetFieldType (1), "#D4");
  285. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  286. Assert.IsFalse (dr.Read (), "#D6");
  287. dr.Close ();
  288. cmd.Dispose ();
  289. cmd = (OdbcCommand) conn.CreateCommand ();
  290. cmd.CommandText = insert_data;
  291. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  292. param.Value = 8223372036854775805L;
  293. cmd.ExecuteNonQuery ();
  294. cmd.Dispose ();
  295. cmd = (OdbcCommand) conn.CreateCommand ();
  296. cmd.CommandText = select_data;
  297. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  298. param.Value = 8223372036854775805L;
  299. param = cmd.Parameters.Add ("id", OdbcType.Int);
  300. param.Value = 6000;
  301. dr = cmd.ExecuteReader ();
  302. Assert.IsTrue (dr.Read (), "#E1");
  303. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  304. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  305. Assert.AreEqual (typeof (long), dr.GetFieldType (1), "#E4");
  306. Assert.AreEqual (8223372036854775805L, dr.GetValue (1), "#E5");
  307. Assert.IsFalse (dr.Read (), "#E6");
  308. dr.Close ();
  309. cmd.Dispose ();
  310. DBHelper.ExecuteNonQuery (conn, delete_data);
  311. cmd = (OdbcCommand) conn.CreateCommand ();
  312. cmd.CommandText = insert_data;
  313. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  314. param.Value = -8223372036854775805L;
  315. cmd.ExecuteNonQuery ();
  316. cmd.Dispose ();
  317. cmd = (OdbcCommand) conn.CreateCommand ();
  318. cmd.CommandText = select_data;
  319. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  320. param.Value = -8223372036854775805L;
  321. param = cmd.Parameters.Add ("id", OdbcType.Int);
  322. param.Value = 6000;
  323. dr = cmd.ExecuteReader ();
  324. Assert.IsTrue (dr.Read (), "#F1");
  325. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  326. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  327. Assert.AreEqual (typeof (long), dr.GetFieldType (1), "#F4");
  328. Assert.AreEqual (-8223372036854775805L, dr.GetValue (1), "#F5");
  329. Assert.IsFalse (dr.Read (), "#F6");
  330. dr.Close ();
  331. cmd.Dispose ();
  332. DBHelper.ExecuteNonQuery (conn, delete_data);
  333. cmd = (OdbcCommand) conn.CreateCommand ();
  334. cmd.CommandText = insert_data;
  335. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  336. param.Value = 0L;
  337. cmd.ExecuteNonQuery ();
  338. cmd.Dispose ();
  339. cmd = (OdbcCommand) conn.CreateCommand ();
  340. cmd.CommandText = select_data;
  341. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  342. param.Value = 0;
  343. param = cmd.Parameters.Add ("id", OdbcType.Int);
  344. param.Value = 6000;
  345. dr = cmd.ExecuteReader ();
  346. Assert.IsTrue (dr.Read (), "#G1");
  347. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  348. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  349. Assert.AreEqual (typeof (long), dr.GetFieldType (1), "#G4");
  350. Assert.AreEqual (0L, dr.GetValue (1), "#G5");
  351. Assert.IsFalse (dr.Read (), "#G6");
  352. dr.Close ();
  353. cmd.Dispose ();
  354. DBHelper.ExecuteNonQuery (conn, delete_data);
  355. cmd = (OdbcCommand) conn.CreateCommand ();
  356. cmd.CommandText = insert_data;
  357. param = cmd.Parameters.Add ("type_bigint", OdbcType.BigInt);
  358. param.Value = DBNull.Value;
  359. cmd.ExecuteNonQuery ();
  360. cmd.Dispose ();
  361. cmd = (OdbcCommand) conn.CreateCommand ();
  362. cmd.CommandText = select_by_id;
  363. param = cmd.Parameters.Add ("id", OdbcType.Int);
  364. param.Value = 6000;
  365. dr = cmd.ExecuteReader ();
  366. Assert.IsTrue (dr.Read (), "#H1");
  367. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  368. Assert.AreEqual (6000, dr.GetValue (0), "#H3");
  369. Assert.AreEqual (typeof (long), dr.GetFieldType (1), "#H4");
  370. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#H5");
  371. Assert.IsFalse (dr.Read (), "#H6");
  372. dr.Close ();
  373. cmd.Dispose ();
  374. } finally {
  375. if (dr != null)
  376. dr.Close ();
  377. if (cmd != null)
  378. cmd.Dispose ();
  379. conn.Close ();
  380. conn.Open ();
  381. DBHelper.ExecuteNonQuery (conn, delete_data);
  382. conn.Close ();
  383. }
  384. }
  385. [Test]
  386. public void BinaryParameterTest ()
  387. {
  388. string insert_data = "insert into binary_family (id, type_binary) values (6000, ?)";
  389. string select_data = "select id, type_binary from binary_family where type_binary = ? and id = ?";
  390. string select_by_id = "select id, type_binary from binary_family where id = ?";
  391. string delete_data = "delete from binary_family where id = 6000";
  392. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  393. conn.Open ();
  394. IDataReader dr = null;
  395. OdbcCommand cmd = null;
  396. OdbcParameter param;
  397. try {
  398. byte [] bytes = new byte [] { 0x35, 0x00, 0x00,
  399. 0x00, 0x00, 0x00, 0x00, 0x00 };
  400. cmd = conn.CreateCommand ();
  401. cmd.CommandText = select_data;
  402. param = cmd.Parameters.Add ("type_binary", OdbcType.Binary);
  403. param.Value = bytes;
  404. param = cmd.Parameters.Add ("id", OdbcType.Int);
  405. param.Value = 1;
  406. dr = cmd.ExecuteReader ();
  407. Assert.IsTrue (dr.Read (), "#A1");
  408. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  409. Assert.AreEqual (1, dr.GetValue (0), "#A3");
  410. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#A4");
  411. Assert.AreEqual (bytes, dr.GetValue (1), "#A5");
  412. Assert.IsFalse (dr.Read (), "#A6");
  413. dr.Close ();
  414. cmd.Dispose ();
  415. bytes = new byte [] { 0x00, 0x33, 0x34, 0x00,
  416. 0x33, 0x30, 0x35, 0x31 };
  417. cmd = conn.CreateCommand ();
  418. cmd.CommandText = select_data;
  419. param = cmd.Parameters.Add ("type_binary", OdbcType.Binary);
  420. param.Value = bytes;
  421. param = cmd.Parameters.Add ("id", OdbcType.Int);
  422. param.Value = 2;
  423. dr = cmd.ExecuteReader ();
  424. Assert.IsTrue (dr.Read (), "#B1");
  425. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  426. Assert.AreEqual (2, dr.GetValue (0), "#B3");
  427. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#B4");
  428. Assert.AreEqual (bytes, dr.GetValue (1), "#B5");
  429. Assert.IsFalse (dr.Read (), "#B6");
  430. dr.Close ();
  431. cmd.Dispose ();
  432. bytes = new byte [8];
  433. cmd = conn.CreateCommand ();
  434. cmd.CommandText = select_data;
  435. param = cmd.Parameters.Add ("type_binary", OdbcType.Binary);
  436. param.Value = bytes;
  437. param = cmd.Parameters.Add ("id", OdbcType.Int);
  438. param.Value = 3;
  439. dr = cmd.ExecuteReader ();
  440. Assert.IsTrue (dr.Read (), "#C1");
  441. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  442. Assert.AreEqual (3, dr.GetValue (0), "#C3");
  443. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#C4");
  444. Assert.AreEqual (bytes, dr.GetValue (1), "#C5");
  445. Assert.IsFalse (dr.Read (), "#C6");
  446. dr.Close ();
  447. cmd.Dispose ();
  448. cmd = conn.CreateCommand ();
  449. cmd.CommandText = select_by_id;
  450. param = cmd.Parameters.Add ("id", OdbcType.Int);
  451. param.Value = 4;
  452. dr = cmd.ExecuteReader ();
  453. Assert.IsTrue (dr.Read (), "#D1");
  454. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  455. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  456. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#D4");
  457. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  458. Assert.IsFalse (dr.Read (), "#D6");
  459. dr.Close ();
  460. cmd.Dispose ();
  461. bytes = new byte [0];
  462. cmd = conn.CreateCommand ();
  463. cmd.CommandText = insert_data;
  464. param = cmd.Parameters.Add ("type_binary", OdbcType.Binary);
  465. param.Value = bytes;
  466. cmd.ExecuteNonQuery ();
  467. cmd.Dispose ();
  468. cmd = conn.CreateCommand ();
  469. cmd.CommandText = select_by_id;
  470. param = cmd.Parameters.Add ("id", OdbcType.Int);
  471. param.Value = 6000;
  472. dr = cmd.ExecuteReader ();
  473. Assert.IsTrue (dr.Read (), "#E1");
  474. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  475. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  476. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#E4");
  477. Assert.AreEqual (new byte [8], dr.GetValue (1), "#E5");
  478. Assert.IsFalse (dr.Read (), "#E6");
  479. dr.Close ();
  480. cmd.Dispose ();
  481. DBHelper.ExecuteNonQuery (conn, delete_data);
  482. bytes = new byte [] { 0x05 };
  483. cmd = conn.CreateCommand ();
  484. cmd.CommandText = insert_data;
  485. param = cmd.Parameters.Add ("type_binary", OdbcType.Binary);
  486. param.Value = bytes;
  487. cmd.ExecuteNonQuery ();
  488. cmd.Dispose ();
  489. cmd = conn.CreateCommand ();
  490. cmd.CommandText = select_by_id;
  491. param = cmd.Parameters.Add ("id", OdbcType.Int);
  492. param.Value = 6000;
  493. dr = cmd.ExecuteReader ();
  494. Assert.IsTrue (dr.Read (), "#F1");
  495. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  496. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  497. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#F4");
  498. Assert.AreEqual (new byte [] { 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, dr.GetValue (1), "#F5");
  499. Assert.IsFalse (dr.Read (), "#F6");
  500. dr.Close ();
  501. cmd.Dispose ();
  502. DBHelper.ExecuteNonQuery (conn, delete_data);
  503. bytes = new byte [] { 0x34, 0x00, 0x32 };
  504. cmd = conn.CreateCommand ();
  505. cmd.CommandText = insert_data;
  506. param = cmd.Parameters.Add ("type_binary", OdbcType.Binary);
  507. param.Value = bytes;
  508. cmd.ExecuteNonQuery ();
  509. cmd.Dispose ();
  510. cmd = conn.CreateCommand ();
  511. cmd.CommandText = select_by_id;
  512. param = cmd.Parameters.Add ("id", OdbcType.Int);
  513. param.Value = 6000;
  514. dr = cmd.ExecuteReader ();
  515. Assert.IsTrue (dr.Read (), "#G1");
  516. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  517. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  518. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#G4");
  519. Assert.AreEqual (new byte [] { 0x34, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00 }, dr.GetValue (1), "#G5");
  520. Assert.IsFalse (dr.Read (), "#G6");
  521. dr.Close ();
  522. cmd.Dispose ();
  523. DBHelper.ExecuteNonQuery (conn, delete_data);
  524. bytes = new byte [] { 0x34, 0x00, 0x32, 0x05, 0x07, 0x13 };
  525. cmd = conn.CreateCommand ();
  526. cmd.CommandText = insert_data;
  527. param = cmd.Parameters.Add ("type_binary", OdbcType.Binary, 4);
  528. param.Value = bytes;
  529. cmd.ExecuteNonQuery ();
  530. cmd.Dispose ();
  531. cmd = conn.CreateCommand ();
  532. cmd.CommandText = select_by_id;
  533. param = cmd.Parameters.Add ("id", OdbcType.Int);
  534. param.Value = 6000;
  535. dr = cmd.ExecuteReader ();
  536. Assert.IsTrue (dr.Read (), "#H1");
  537. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  538. Assert.AreEqual (6000, dr.GetValue (0), "#H3");
  539. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#H4");
  540. Assert.AreEqual (new byte [] { 0x34, 0x00, 0x32, 0x05, 0x00, 0x00, 0x00, 0x00 }, dr.GetValue (1), "#H5");
  541. Assert.IsFalse (dr.Read (), "#H6");
  542. dr.Close ();
  543. cmd.Dispose ();
  544. DBHelper.ExecuteNonQuery (conn, delete_data);
  545. cmd = conn.CreateCommand ();
  546. cmd.CommandText = insert_data;
  547. param = cmd.Parameters.Add ("type_binary", OdbcType.Binary);
  548. param.Value = DBNull.Value;
  549. cmd.ExecuteNonQuery ();
  550. cmd.Dispose ();
  551. cmd = conn.CreateCommand ();
  552. cmd.CommandText = select_by_id;
  553. param = cmd.Parameters.Add ("id", OdbcType.Int);
  554. param.Value = 6000;
  555. dr = cmd.ExecuteReader ();
  556. Assert.IsTrue (dr.Read (), "#I1");
  557. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#I2");
  558. Assert.AreEqual (6000, dr.GetValue (0), "#I3");
  559. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#I4");
  560. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#I5");
  561. Assert.IsFalse (dr.Read (), "#I6");
  562. dr.Close ();
  563. cmd.Dispose ();
  564. } finally {
  565. if (dr != null)
  566. dr.Close ();
  567. if (cmd != null)
  568. cmd.Dispose ();
  569. conn.Close ();
  570. conn.Open ();
  571. DBHelper.ExecuteNonQuery (conn, delete_data);
  572. conn.Close ();
  573. }
  574. }
  575. [Test]
  576. public void SmallIntParamTest ()
  577. {
  578. string insert_data = "insert into numeric_family (id, type_smallint) values (6000, ?)";
  579. string select_data = "select id, type_smallint from numeric_family where type_smallint = ? and id = ?";
  580. string select_by_id = "select id, type_smallint from numeric_family where id = ?";
  581. string delete_data = "delete from numeric_family where id = 6000";
  582. IDbConnection conn = ConnectionManager.Singleton.Connection;
  583. conn.Open ();
  584. IDataReader dr = null;
  585. OdbcCommand cmd = null;
  586. OdbcParameter param;
  587. try {
  588. cmd = (OdbcCommand) conn.CreateCommand ();
  589. cmd.CommandText = select_data;
  590. param = cmd.Parameters.Add ("type_smallint", OdbcType.SmallInt);
  591. param.Value = short.MaxValue;
  592. param = cmd.Parameters.Add ("id", OdbcType.Int);
  593. param.Value = 1;
  594. dr = cmd.ExecuteReader ();
  595. Assert.IsTrue (dr.Read (), "#A1");
  596. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  597. Assert.AreEqual (1, dr.GetValue (0), "#A2");
  598. Assert.AreEqual (typeof (short), dr.GetFieldType (1), "#A3");
  599. Assert.AreEqual (short.MaxValue, dr.GetValue (1), "#A4");
  600. Assert.IsFalse (dr.Read (), "#A5");
  601. dr.Close ();
  602. cmd.Dispose ();
  603. cmd = (OdbcCommand) conn.CreateCommand ();
  604. cmd.CommandText = select_data;
  605. param = cmd.Parameters.Add ("type_smallint", OdbcType.SmallInt);
  606. param.Value = short.MinValue;
  607. param = cmd.Parameters.Add ("id", OdbcType.Int);
  608. param.Value = 2;
  609. dr = cmd.ExecuteReader ();
  610. Assert.IsTrue (dr.Read (), "#B1");
  611. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  612. Assert.AreEqual (2, dr.GetValue (0), "#B2");
  613. Assert.AreEqual (typeof (short), dr.GetFieldType (1), "#B3");
  614. Assert.AreEqual (short.MinValue, dr.GetValue (1), "#B4");
  615. Assert.IsFalse (dr.Read (), "#B5");
  616. dr.Close ();
  617. cmd.Dispose ();
  618. cmd = (OdbcCommand) conn.CreateCommand ();
  619. cmd.CommandText = select_data;
  620. param = cmd.Parameters.Add ("type_smallint", OdbcType.SmallInt);
  621. param.Value = (short) 0;
  622. param = cmd.Parameters.Add ("id", OdbcType.Int);
  623. param.Value = 3;
  624. dr = cmd.ExecuteReader ();
  625. Assert.IsTrue (dr.Read (), "#C1");
  626. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  627. Assert.AreEqual (3, dr.GetValue (0), "#C2");
  628. Assert.AreEqual (typeof (short), dr.GetFieldType (1), "#C3");
  629. Assert.AreEqual (0, dr.GetValue (1), "#C4");
  630. Assert.IsFalse (dr.Read (), "#C5");
  631. dr.Close ();
  632. cmd.Dispose ();
  633. cmd = (OdbcCommand) conn.CreateCommand ();
  634. cmd.CommandText = select_by_id;
  635. param = cmd.Parameters.Add ("id", OdbcType.Int);
  636. param.Value = 4;
  637. dr = cmd.ExecuteReader ();
  638. Assert.IsTrue (dr.Read (), "#D1");
  639. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  640. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  641. Assert.AreEqual (typeof (short), dr.GetFieldType (1), "#D4");
  642. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  643. Assert.IsFalse (dr.Read (), "#D6");
  644. dr.Close ();
  645. cmd.Dispose ();
  646. cmd = (OdbcCommand) conn.CreateCommand ();
  647. cmd.CommandText = insert_data;
  648. param = cmd.Parameters.Add ("type_smallint", OdbcType.SmallInt);
  649. param.Value = short.MaxValue;
  650. cmd.ExecuteNonQuery ();
  651. cmd.Dispose ();
  652. cmd = (OdbcCommand) conn.CreateCommand ();
  653. cmd.CommandText = select_by_id;
  654. param = cmd.Parameters.Add ("id", OdbcType.Int);
  655. param.Value = 6000;
  656. dr = cmd.ExecuteReader ();
  657. Assert.IsTrue (dr.Read (), "#E1");
  658. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  659. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  660. Assert.AreEqual (typeof (short), dr.GetFieldType (1), "#E4");
  661. Assert.AreEqual (short.MaxValue, dr.GetValue (1), "#E5");
  662. Assert.IsFalse (dr.Read (), "#E6");
  663. dr.Close ();
  664. cmd.Dispose ();
  665. DBHelper.ExecuteNonQuery (conn, delete_data);
  666. cmd = (OdbcCommand) conn.CreateCommand ();
  667. cmd.CommandText = insert_data;
  668. param = cmd.Parameters.Add ("type_smallint", OdbcType.SmallInt);
  669. param.Value = short.MinValue;
  670. cmd.ExecuteNonQuery ();
  671. cmd.Dispose ();
  672. cmd = (OdbcCommand) conn.CreateCommand ();
  673. cmd.CommandText = select_by_id;
  674. param = cmd.Parameters.Add ("id", OdbcType.Int);
  675. param.Value = 6000;
  676. dr = cmd.ExecuteReader ();
  677. Assert.IsTrue (dr.Read (), "#F1");
  678. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  679. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  680. Assert.AreEqual (typeof (short), dr.GetFieldType (1), "#F4");
  681. Assert.AreEqual (short.MinValue, dr.GetValue (1), "#F5");
  682. Assert.IsFalse (dr.Read (), "#F6");
  683. dr.Close ();
  684. cmd.Dispose ();
  685. DBHelper.ExecuteNonQuery (conn, delete_data);
  686. cmd = (OdbcCommand) conn.CreateCommand ();
  687. cmd.CommandText = insert_data;
  688. param = cmd.Parameters.Add ("type_smallint", OdbcType.SmallInt);
  689. param.Value = 0;
  690. cmd.ExecuteNonQuery ();
  691. cmd.Dispose ();
  692. cmd = (OdbcCommand) conn.CreateCommand ();
  693. cmd.CommandText = select_by_id;
  694. param = cmd.Parameters.Add ("id", OdbcType.Int);
  695. param.Value = 6000;
  696. dr = cmd.ExecuteReader ();
  697. Assert.IsTrue (dr.Read (), "#G1");
  698. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  699. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  700. Assert.AreEqual (typeof (short), dr.GetFieldType (1), "#G4");
  701. Assert.AreEqual ((short) 0, dr.GetValue (1), "#G5");
  702. Assert.IsFalse (dr.Read (), "#G6");
  703. dr.Close ();
  704. cmd.Dispose ();
  705. DBHelper.ExecuteNonQuery (conn, delete_data);
  706. cmd = (OdbcCommand) conn.CreateCommand ();
  707. cmd.CommandText = insert_data;
  708. param = cmd.Parameters.Add ("type_smallint", OdbcType.SmallInt);
  709. param.Value = DBNull.Value;
  710. cmd.ExecuteNonQuery ();
  711. cmd.Dispose ();
  712. cmd = (OdbcCommand) conn.CreateCommand ();
  713. cmd.CommandText = select_by_id;
  714. param = cmd.Parameters.Add ("id", OdbcType.Int);
  715. param.Value = 6000;
  716. dr = cmd.ExecuteReader ();
  717. Assert.IsTrue (dr.Read (), "#H1");
  718. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  719. Assert.AreEqual (6000, dr.GetValue (0), "#H3");
  720. Assert.AreEqual (typeof (short), dr.GetFieldType (1), "#H4");
  721. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#H5");
  722. Assert.IsFalse (dr.Read (), "#H6");
  723. dr.Close ();
  724. cmd.Dispose ();
  725. } finally {
  726. if (dr != null)
  727. dr.Close ();
  728. if (cmd != null)
  729. cmd.Dispose ();
  730. conn.Close ();
  731. conn.Open ();
  732. DBHelper.ExecuteNonQuery (conn, delete_data);
  733. conn.Close ();
  734. }
  735. }
  736. [Test]
  737. public void TimestampParameterTest ()
  738. {
  739. // the value for the timestamp column is determined by
  740. // the RDBMS upon insert/update and cannot be specified
  741. // by the user
  742. string insert_data = "insert into binary_family (id) values (6000)";
  743. string select_by_id = "select id, type_timestamp from binary_family where id = ?";
  744. string delete_data = "delete from binary_family where id = 6000";
  745. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  746. conn.Open ();
  747. IDataReader dr = null;
  748. OdbcCommand cmd = null;
  749. OdbcParameter param;
  750. try {
  751. if (!ConnectionManager.Singleton.Engine.SupportsTimestamp)
  752. Assert.Ignore ("Timestamp test does not apply to the current driver (" + conn.Driver + ").");
  753. cmd = conn.CreateCommand ();
  754. cmd.CommandText = insert_data;
  755. cmd.ExecuteNonQuery ();
  756. cmd.Dispose ();
  757. byte [] timestamp;
  758. cmd = conn.CreateCommand ();
  759. cmd.CommandText = "SELECT @@DBTS";
  760. dr = cmd.ExecuteReader ();
  761. Assert.IsTrue (dr.Read (), "#A1");
  762. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#A2");
  763. timestamp = (byte []) dr.GetValue (0);
  764. Assert.IsFalse (dr.Read (), "#A3");
  765. dr.Close ();
  766. cmd.Dispose ();
  767. cmd = conn.CreateCommand ();
  768. cmd.CommandText = select_by_id;
  769. param = cmd.Parameters.Add ("id", OdbcType.Int);
  770. param.Value = 6000;
  771. dr = cmd.ExecuteReader ();
  772. Assert.IsTrue (dr.Read (), "#B1");
  773. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  774. Assert.AreEqual (6000, dr.GetValue (0), "#B3");
  775. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#B4");
  776. Assert.AreEqual (timestamp, dr.GetValue (1), "#B5");
  777. Assert.IsFalse (dr.Read (), "#B6");
  778. dr.Close ();
  779. cmd.Dispose ();
  780. } finally {
  781. if (dr != null)
  782. dr.Close ();
  783. if (cmd != null)
  784. cmd.Dispose ();
  785. conn.Close ();
  786. conn.Open ();
  787. DBHelper.ExecuteNonQuery (conn, delete_data);
  788. conn.Close ();
  789. }
  790. }
  791. [Test]
  792. public void TinyIntParamTest ()
  793. {
  794. string insert_data = "insert into numeric_family (id, type_tinyint) values (6000, ?)";
  795. string select_data = "select id, type_tinyint from numeric_family where type_tinyint = ? and id = ?";
  796. string select_by_id = "select id, type_tinyint from numeric_family where id = ?";
  797. string delete_data = "delete from numeric_family where id = 6000";
  798. IDbConnection conn = ConnectionManager.Singleton.Connection;
  799. conn.Open ();
  800. IDataReader dr = null;
  801. OdbcCommand cmd = null;
  802. OdbcParameter param;
  803. try {
  804. cmd = (OdbcCommand) conn.CreateCommand ();
  805. cmd.CommandText = select_data;
  806. param = cmd.Parameters.Add ("type_tinyint", OdbcType.TinyInt);
  807. param.Value = byte.MaxValue;
  808. param = cmd.Parameters.Add ("id", OdbcType.Int);
  809. param.Value = 1;
  810. dr = cmd.ExecuteReader ();
  811. Assert.IsTrue (dr.Read (), "#A1");
  812. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  813. Assert.AreEqual (1, dr.GetValue (0), "#A2");
  814. Assert.AreEqual (typeof (byte), dr.GetFieldType (1), "#A3");
  815. Assert.AreEqual (byte.MaxValue, dr.GetValue (1), "#A4");
  816. Assert.IsFalse (dr.Read (), "#A5");
  817. dr.Close ();
  818. cmd.Dispose ();
  819. cmd = (OdbcCommand) conn.CreateCommand ();
  820. cmd.CommandText = select_data;
  821. param = cmd.Parameters.Add ("type_tinyint", OdbcType.TinyInt);
  822. param.Value = byte.MinValue;
  823. param = cmd.Parameters.Add ("id", OdbcType.Int);
  824. param.Value = 2;
  825. dr = cmd.ExecuteReader ();
  826. Assert.IsTrue (dr.Read (), "#B1");
  827. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  828. Assert.AreEqual (2, dr.GetValue (0), "#B2");
  829. Assert.AreEqual (typeof (byte), dr.GetFieldType (1), "#B3");
  830. Assert.AreEqual (byte.MinValue, dr.GetValue (1), "#B4");
  831. Assert.IsFalse (dr.Read (), "#B5");
  832. dr.Close ();
  833. cmd.Dispose ();
  834. cmd = (OdbcCommand) conn.CreateCommand ();
  835. cmd.CommandText = select_data;
  836. param = cmd.Parameters.Add ("type_tinyint", OdbcType.TinyInt);
  837. param.Value = 0x00;
  838. param = cmd.Parameters.Add ("id", OdbcType.Int);
  839. param.Value = 3;
  840. dr = cmd.ExecuteReader ();
  841. Assert.IsTrue (dr.Read (), "#C1");
  842. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  843. Assert.AreEqual (3, dr.GetValue (0), "#C2");
  844. Assert.AreEqual (typeof (byte), dr.GetFieldType (1), "#C3");
  845. Assert.AreEqual (0x00, dr.GetValue (1), "#C4");
  846. Assert.IsFalse (dr.Read (), "#C5");
  847. dr.Close ();
  848. cmd.Dispose ();
  849. cmd = (OdbcCommand) conn.CreateCommand ();
  850. cmd.CommandText = select_by_id;
  851. param = cmd.Parameters.Add ("id", OdbcType.Int);
  852. param.Value = 4;
  853. dr = cmd.ExecuteReader ();
  854. Assert.IsTrue (dr.Read (), "#D1");
  855. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  856. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  857. Assert.AreEqual (typeof (byte), dr.GetFieldType (1), "#D4");
  858. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  859. Assert.IsFalse (dr.Read (), "#D6");
  860. dr.Close ();
  861. cmd.Dispose ();
  862. cmd = (OdbcCommand) conn.CreateCommand ();
  863. cmd.CommandText = insert_data;
  864. param = cmd.Parameters.Add ("type_tinyint", OdbcType.TinyInt);
  865. param.Value = byte.MaxValue;
  866. cmd.ExecuteNonQuery ();
  867. cmd.Dispose ();
  868. cmd = (OdbcCommand) conn.CreateCommand ();
  869. cmd.CommandText = select_by_id;
  870. param = cmd.Parameters.Add ("id", OdbcType.Int);
  871. param.Value = 6000;
  872. dr = cmd.ExecuteReader ();
  873. Assert.IsTrue (dr.Read (), "#E1");
  874. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  875. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  876. Assert.AreEqual (typeof (byte), dr.GetFieldType (1), "#E4");
  877. Assert.AreEqual (byte.MaxValue, dr.GetValue (1), "#E5");
  878. Assert.IsFalse (dr.Read (), "#E6");
  879. dr.Close ();
  880. cmd.Dispose ();
  881. DBHelper.ExecuteNonQuery (conn, delete_data);
  882. cmd = (OdbcCommand) conn.CreateCommand ();
  883. cmd.CommandText = insert_data;
  884. param = cmd.Parameters.Add ("type_tinyint", OdbcType.TinyInt);
  885. param.Value = byte.MinValue;
  886. cmd.ExecuteNonQuery ();
  887. cmd.Dispose ();
  888. cmd = (OdbcCommand) conn.CreateCommand ();
  889. cmd.CommandText = select_by_id;
  890. param = cmd.Parameters.Add ("id", OdbcType.Int);
  891. param.Value = 6000;
  892. dr = cmd.ExecuteReader ();
  893. Assert.IsTrue (dr.Read (), "#F1");
  894. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  895. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  896. Assert.AreEqual (typeof (byte), dr.GetFieldType (1), "#F4");
  897. Assert.AreEqual (byte.MinValue, dr.GetValue (1), "#F5");
  898. Assert.IsFalse (dr.Read (), "#F6");
  899. dr.Close ();
  900. cmd.Dispose ();
  901. DBHelper.ExecuteNonQuery (conn, delete_data);
  902. cmd = (OdbcCommand) conn.CreateCommand ();
  903. cmd.CommandText = insert_data;
  904. param = cmd.Parameters.Add ("type_tinyint", OdbcType.TinyInt);
  905. param.Value = 0x00;
  906. cmd.ExecuteNonQuery ();
  907. cmd.Dispose ();
  908. cmd = (OdbcCommand) conn.CreateCommand ();
  909. cmd.CommandText = select_by_id;
  910. param = cmd.Parameters.Add ("id", OdbcType.Int);
  911. param.Value = 6000;
  912. dr = cmd.ExecuteReader ();
  913. Assert.IsTrue (dr.Read (), "#G1");
  914. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  915. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  916. Assert.AreEqual (typeof (byte), dr.GetFieldType (1), "#G4");
  917. Assert.AreEqual (0x00, dr.GetValue (1), "#G5");
  918. Assert.IsFalse (dr.Read (), "#G6");
  919. dr.Close ();
  920. cmd.Dispose ();
  921. DBHelper.ExecuteNonQuery (conn, delete_data);
  922. cmd = (OdbcCommand) conn.CreateCommand ();
  923. cmd.CommandText = insert_data;
  924. param = cmd.Parameters.Add ("type_tinyint", OdbcType.TinyInt);
  925. param.Value = DBNull.Value;
  926. cmd.ExecuteNonQuery ();
  927. cmd.Dispose ();
  928. cmd = (OdbcCommand) conn.CreateCommand ();
  929. cmd.CommandText = select_by_id;
  930. param = cmd.Parameters.Add ("id", OdbcType.Int);
  931. param.Value = 6000;
  932. dr = cmd.ExecuteReader ();
  933. Assert.IsTrue (dr.Read (), "#H1");
  934. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  935. Assert.AreEqual (6000, dr.GetValue (0), "#H3");
  936. Assert.AreEqual (typeof (byte), dr.GetFieldType (1), "#H4");
  937. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#H5");
  938. Assert.IsFalse (dr.Read (), "#H6");
  939. dr.Close ();
  940. cmd.Dispose ();
  941. } finally {
  942. if (dr != null)
  943. dr.Close ();
  944. if (cmd != null)
  945. cmd.Dispose ();
  946. conn.Close ();
  947. conn.Open ();
  948. DBHelper.ExecuteNonQuery (conn, delete_data);
  949. conn.Close ();
  950. }
  951. }
  952. [Test]
  953. public void StringParamTest ()
  954. {
  955. string query = "select id, fname from employee where fname = ?";
  956. IDbConnection conn = ConnectionManager.Singleton.Connection;
  957. try {
  958. ConnectionManager.Singleton.OpenConnection ();
  959. OdbcCommand cmd = (OdbcCommand) conn.CreateCommand ();
  960. cmd.CommandText = query;
  961. OdbcParameter param = cmd.Parameters.Add ("fname", OdbcType.VarChar);
  962. param.Value = "suresh";
  963. OdbcDataReader dr = cmd.ExecuteReader ();
  964. Assert.IsTrue (dr.Read (), "#1 no data to test");
  965. Assert.AreEqual (1, (int) dr [0], "#2 value not matching");
  966. } finally {
  967. ConnectionManager.Singleton.CloseConnection ();
  968. }
  969. }
  970. [Test]
  971. public void BitParameterTest ()
  972. {
  973. string insert_data = "insert into numeric_family (id, type_bit) values (6000, ?)";
  974. string select_data = "select id, type_bit from numeric_family where type_bit = ? and id = ?";
  975. string select_by_id = "select id, type_bit from numeric_family where id = ?";
  976. string delete_data = "delete from numeric_family where id = 6000";
  977. IDbConnection conn = ConnectionManager.Singleton.Connection;
  978. conn.Open ();
  979. IDataReader dr = null;
  980. OdbcCommand cmd = null;
  981. OdbcParameter param;
  982. try {
  983. cmd = (OdbcCommand) conn.CreateCommand ();
  984. cmd.CommandText = select_data;
  985. param = cmd.Parameters.Add ("type_bit", OdbcType.Bit);
  986. param.Value = true;
  987. param = cmd.Parameters.Add ("id", OdbcType.Int);
  988. param.Value = 1;
  989. dr = cmd.ExecuteReader ();
  990. Assert.IsTrue (dr.Read (), "#A1");
  991. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  992. Assert.AreEqual (1, dr.GetValue (0), "#A2");
  993. Assert.AreEqual (typeof (bool), dr.GetFieldType (1), "#A3");
  994. Assert.AreEqual (true, dr.GetValue (1), "#A4");
  995. Assert.IsFalse (dr.Read (), "#A5");
  996. dr.Close ();
  997. cmd.Dispose ();
  998. cmd = (OdbcCommand) conn.CreateCommand ();
  999. cmd.CommandText = select_data;
  1000. param = cmd.Parameters.Add ("type_bit", OdbcType.Bit);
  1001. param.Value = false;
  1002. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1003. param.Value = 2;
  1004. dr = cmd.ExecuteReader ();
  1005. Assert.IsTrue (dr.Read (), "#B1");
  1006. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  1007. Assert.AreEqual (2, dr.GetValue (0), "#B2");
  1008. Assert.AreEqual (typeof (bool), dr.GetFieldType (1), "#B3");
  1009. if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
  1010. // MySQL does not support true BIT type
  1011. Assert.AreEqual (true, dr.GetValue (1), "#B4");
  1012. else
  1013. Assert.AreEqual (false, dr.GetValue (1), "#B4");
  1014. Assert.IsFalse (dr.Read (), "#B5");
  1015. dr.Close ();
  1016. cmd.Dispose ();
  1017. cmd = (OdbcCommand) conn.CreateCommand ();
  1018. cmd.CommandText = select_by_id;
  1019. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1020. param.Value = 4;
  1021. dr = cmd.ExecuteReader ();
  1022. Assert.IsTrue (dr.Read (), "#C1");
  1023. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  1024. Assert.AreEqual (4, dr.GetValue (0), "#C3");
  1025. Assert.AreEqual (typeof (bool), dr.GetFieldType (1), "#C4");
  1026. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#C5");
  1027. Assert.IsFalse (dr.Read (), "#C6");
  1028. dr.Close ();
  1029. cmd.Dispose ();
  1030. cmd = (OdbcCommand) conn.CreateCommand ();
  1031. cmd.CommandText = insert_data;
  1032. param = cmd.Parameters.Add ("type_bit", OdbcType.Bit);
  1033. param.Value = true;
  1034. cmd.ExecuteNonQuery ();
  1035. cmd.Dispose ();
  1036. cmd = (OdbcCommand) conn.CreateCommand ();
  1037. cmd.CommandText = select_data;
  1038. param = cmd.Parameters.Add ("type_bit", OdbcType.Bit);
  1039. param.Value = true;
  1040. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1041. param.Value = 6000;
  1042. dr = cmd.ExecuteReader ();
  1043. Assert.IsTrue (dr.Read (), "#D1");
  1044. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  1045. Assert.AreEqual (6000, dr.GetValue (0), "#D3");
  1046. Assert.AreEqual (typeof (bool), dr.GetFieldType (1), "#D4");
  1047. Assert.AreEqual (true, dr.GetValue (1), "#D5");
  1048. Assert.IsFalse (dr.Read (), "#D6");
  1049. dr.Close ();
  1050. cmd.Dispose ();
  1051. DBHelper.ExecuteNonQuery (conn, delete_data);
  1052. cmd = (OdbcCommand) conn.CreateCommand ();
  1053. cmd.CommandText = insert_data;
  1054. param = cmd.Parameters.Add ("type_bit", OdbcType.Bit);
  1055. param.Value = false;
  1056. cmd.ExecuteNonQuery ();
  1057. cmd.Dispose ();
  1058. cmd = (OdbcCommand) conn.CreateCommand ();
  1059. cmd.CommandText = select_data;
  1060. param = cmd.Parameters.Add ("type_bit", OdbcType.Bit);
  1061. param.Value = false;
  1062. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1063. param.Value = 6000;
  1064. dr = cmd.ExecuteReader ();
  1065. Assert.IsTrue (dr.Read (), "#E1");
  1066. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  1067. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  1068. Assert.AreEqual (typeof (bool), dr.GetFieldType (1), "#E4");
  1069. if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
  1070. // MySQL does not support true BIT type
  1071. Assert.AreEqual (true, dr.GetValue (1), "#E5");
  1072. else
  1073. Assert.AreEqual (false, dr.GetValue (1), "#E5");
  1074. Assert.IsFalse (dr.Read (), "#E6");
  1075. dr.Close ();
  1076. cmd.Dispose ();
  1077. DBHelper.ExecuteNonQuery (conn, delete_data);
  1078. cmd = (OdbcCommand) conn.CreateCommand ();
  1079. cmd.CommandText = insert_data;
  1080. param = cmd.Parameters.Add ("type_bit", OdbcType.Bit);
  1081. param.Value = DBNull.Value;
  1082. cmd.ExecuteNonQuery ();
  1083. cmd.Dispose ();
  1084. cmd = (OdbcCommand) conn.CreateCommand ();
  1085. cmd.CommandText = select_by_id;
  1086. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1087. param.Value = 6000;
  1088. dr = cmd.ExecuteReader ();
  1089. Assert.IsTrue (dr.Read (), "#F1");
  1090. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  1091. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  1092. Assert.AreEqual (typeof (bool), dr.GetFieldType (1), "#F4");
  1093. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#F5");
  1094. Assert.IsFalse (dr.Read (), "#F6");
  1095. dr.Close ();
  1096. cmd.Dispose ();
  1097. } finally {
  1098. if (dr != null)
  1099. dr.Close ();
  1100. if (cmd != null)
  1101. cmd.Dispose ();
  1102. conn.Close ();
  1103. conn.Open ();
  1104. DBHelper.ExecuteNonQuery (conn, delete_data);
  1105. conn.Close ();
  1106. }
  1107. }
  1108. [Test]
  1109. public void CharParameterTest ()
  1110. {
  1111. string insert_data = "insert into string_family (id, type_char) values (6000, ?)";
  1112. string select_data = "select id, type_char from string_family where type_char = ? and id = ?";
  1113. string select_by_id = "select id, type_char from string_family where id = ?";
  1114. string delete_data = "delete from string_family where id = 6000";
  1115. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  1116. conn.Open ();
  1117. IDataReader dr = null;
  1118. OdbcCommand cmd = null;
  1119. OdbcParameter param;
  1120. try {
  1121. cmd = conn.CreateCommand ();
  1122. cmd.CommandText = select_data;
  1123. param = cmd.Parameters.Add ("type_char", OdbcType.Char);
  1124. param.Value = "char";
  1125. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1126. param.Value = 1;
  1127. dr = cmd.ExecuteReader ();
  1128. Assert.IsTrue (dr.Read (), "#A1");
  1129. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  1130. Assert.AreEqual (1, dr.GetValue (0), "#A3");
  1131. Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#A4");
  1132. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  1133. Assert.AreEqual ("char", dr.GetValue (1), "#A5");
  1134. else
  1135. Assert.AreEqual ("char ", dr.GetValue (1), "#A5");
  1136. Assert.IsFalse (dr.Read (), "#A6");
  1137. dr.Close ();
  1138. cmd.Dispose ();
  1139. cmd = conn.CreateCommand ();
  1140. cmd.CommandText = select_data;
  1141. param = cmd.Parameters.Add ("type_char", OdbcType.Char);
  1142. param.Value = "0123456789";
  1143. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1144. param.Value = 2;
  1145. dr = cmd.ExecuteReader ();
  1146. Assert.IsTrue (dr.Read (), "#B1");
  1147. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  1148. Assert.AreEqual (2, dr.GetValue (0), "#B3");
  1149. Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#B4");
  1150. Assert.AreEqual ("0123456789", dr.GetValue (1), "#B5");
  1151. Assert.IsFalse (dr.Read (), "#B6");
  1152. dr.Close ();
  1153. cmd.Dispose ();
  1154. cmd = conn.CreateCommand ();
  1155. cmd.CommandText = select_data;
  1156. param = cmd.Parameters.Add ("type_char", OdbcType.Char);
  1157. param.Value = string.Empty;
  1158. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1159. param.Value = 3;
  1160. dr = cmd.ExecuteReader ();
  1161. Assert.IsTrue (dr.Read (), "#C1");
  1162. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  1163. Assert.AreEqual (3, dr.GetValue (0), "#C3");
  1164. Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#C4");
  1165. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  1166. Assert.AreEqual (string.Empty, dr.GetValue (1), "#C5");
  1167. else
  1168. Assert.AreEqual (" ", dr.GetValue (1), "#C5");
  1169. Assert.IsFalse (dr.Read (), "#C6");
  1170. dr.Close ();
  1171. cmd.Dispose ();
  1172. cmd = conn.CreateCommand ();
  1173. cmd.CommandText = select_by_id;
  1174. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1175. param.Value = 4;
  1176. dr = cmd.ExecuteReader ();
  1177. Assert.IsTrue (dr.Read (), "#D1");
  1178. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  1179. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  1180. Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#D4");
  1181. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  1182. Assert.IsFalse (dr.Read (), "#D6");
  1183. dr.Close ();
  1184. cmd.Dispose ();
  1185. cmd = conn.CreateCommand ();
  1186. cmd.CommandText = insert_data;
  1187. param = cmd.Parameters.Add ("type_char", OdbcType.Char, 3);
  1188. param.Value = "ABCD";
  1189. cmd.ExecuteNonQuery ();
  1190. cmd.Dispose ();
  1191. cmd = conn.CreateCommand ();
  1192. cmd.CommandText = select_data;
  1193. param = cmd.Parameters.Add ("type_char", OdbcType.Char, 3);
  1194. param.Value = "ABCE ";
  1195. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1196. param.Value = 6000;
  1197. dr = cmd.ExecuteReader ();
  1198. Assert.IsTrue (dr.Read (), "#E1");
  1199. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  1200. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  1201. Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#E4");
  1202. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  1203. Assert.AreEqual ("ABC", dr.GetValue (1), "#E5");
  1204. else
  1205. Assert.AreEqual ("ABC ", dr.GetValue (1), "#E5");
  1206. Assert.IsFalse (dr.Read (), "#E6");
  1207. dr.Close ();
  1208. cmd.Dispose ();
  1209. DBHelper.ExecuteNonQuery (conn, delete_data);
  1210. cmd = conn.CreateCommand ();
  1211. cmd.CommandText = insert_data;
  1212. param = cmd.Parameters.Add ("type_char", OdbcType.Char, 20);
  1213. param.Value = "ABCDEFGHIJ";
  1214. cmd.ExecuteNonQuery ();
  1215. cmd.Dispose ();
  1216. cmd = conn.CreateCommand ();
  1217. cmd.CommandText = select_data;
  1218. param = cmd.Parameters.Add ("type_char", OdbcType.Char);
  1219. param.Value = "ABCDEFGHIJ";
  1220. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1221. param.Value = 6000;
  1222. dr = cmd.ExecuteReader ();
  1223. Assert.IsTrue (dr.Read (), "#F1");
  1224. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  1225. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  1226. Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#F4");
  1227. Assert.AreEqual ("ABCDEFGHIJ", dr.GetValue (1), "#F5");
  1228. Assert.IsFalse (dr.Read (), "#F6");
  1229. dr.Close ();
  1230. cmd.Dispose ();
  1231. DBHelper.ExecuteNonQuery (conn, delete_data);
  1232. cmd = conn.CreateCommand ();
  1233. cmd.CommandText = insert_data;
  1234. param = cmd.Parameters.Add ("type_char", OdbcType.Char, 20);
  1235. param.Value = string.Empty;
  1236. cmd.ExecuteNonQuery ();
  1237. cmd.Dispose ();
  1238. cmd = conn.CreateCommand ();
  1239. cmd.CommandText = select_data;
  1240. param = cmd.Parameters.Add ("type_char", OdbcType.Char);
  1241. param.Value = string.Empty;
  1242. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1243. param.Value = 6000;
  1244. dr = cmd.ExecuteReader ();
  1245. Assert.IsTrue (dr.Read (), "#G1");
  1246. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  1247. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  1248. Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#G4");
  1249. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  1250. Assert.AreEqual (string.Empty, dr.GetValue (1), "#G5");
  1251. else
  1252. Assert.AreEqual (" ", dr.GetValue (1), "#G5");
  1253. Assert.IsFalse (dr.Read (), "#G6");
  1254. dr.Close ();
  1255. cmd.Dispose ();
  1256. DBHelper.ExecuteNonQuery (conn, delete_data);
  1257. cmd = conn.CreateCommand ();
  1258. cmd.CommandText = insert_data;
  1259. param = cmd.Parameters.Add ("type_char", OdbcType.Char);
  1260. param.Value = DBNull.Value;
  1261. cmd.ExecuteNonQuery ();
  1262. cmd.Dispose ();
  1263. cmd = conn.CreateCommand ();
  1264. cmd.CommandText = select_by_id;
  1265. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1266. param.Value = 4;
  1267. dr = cmd.ExecuteReader ();
  1268. Assert.IsTrue (dr.Read (), "#H1");
  1269. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  1270. Assert.AreEqual (4, dr.GetValue (0), "#H3");
  1271. Assert.AreEqual (typeof (string), dr.GetFieldType (1), "#H4");
  1272. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#H5");
  1273. Assert.IsFalse (dr.Read (), "#H6");
  1274. dr.Close ();
  1275. cmd.Dispose ();
  1276. } finally {
  1277. if (dr != null)
  1278. dr.Close ();
  1279. if (cmd != null)
  1280. cmd.Dispose ();
  1281. conn.Close ();
  1282. conn.Open ();
  1283. DBHelper.ExecuteNonQuery (conn, delete_data);
  1284. conn.Close ();
  1285. }
  1286. }
  1287. [Test]
  1288. public void DecimalParameterTest ()
  1289. {
  1290. string select_data1 = "select id, type_decimal1 from numeric_family where type_decimal1 = ? and id = ?";
  1291. string select_data2 = "select id, type_decimal2 from numeric_family where type_decimal2 = ? and id = ?";
  1292. string select_by_id = "select id, type_decimal1, type_decimal2 from numeric_family where id = ?";
  1293. string insert_data = "insert into numeric_family (id, type_decimal1, type_decimal2) values (6000, ?, ?)";
  1294. string delete_data = "delete from numeric_family where id = 6000";
  1295. IDbConnection conn = ConnectionManager.Singleton.Connection;
  1296. conn.Open ();
  1297. IDataReader dr = null;
  1298. OdbcCommand cmd = null;
  1299. OdbcParameter param;
  1300. try {
  1301. cmd = (OdbcCommand) conn.CreateCommand ();
  1302. cmd.CommandText = select_data1;
  1303. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1304. param.Value = 1000.00m;
  1305. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1306. param.Value = 1;
  1307. dr = cmd.ExecuteReader ();
  1308. Assert.IsTrue (dr.Read (), "#A1");
  1309. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  1310. Assert.AreEqual (1, dr.GetValue (0), "#A3");
  1311. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#A4");
  1312. Assert.AreEqual (1000m, dr.GetValue (1), "#A5");
  1313. Assert.IsFalse (dr.Read (), "#A6");
  1314. dr.Close ();
  1315. cmd.Dispose ();
  1316. cmd = (OdbcCommand) conn.CreateCommand ();
  1317. cmd.CommandText = select_data1;
  1318. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1319. param.Value = -1000.00m;
  1320. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1321. param.Value = 2;
  1322. dr = cmd.ExecuteReader ();
  1323. Assert.IsTrue (dr.Read (), "#B1");
  1324. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  1325. Assert.AreEqual (2, dr.GetValue (0), "#B3");
  1326. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#B4");
  1327. Assert.AreEqual (-1000m, dr.GetValue (1), "#B5");
  1328. Assert.IsFalse (dr.Read (), "#B6");
  1329. dr.Close ();
  1330. cmd.Dispose ();
  1331. cmd = (OdbcCommand) conn.CreateCommand ();
  1332. cmd.CommandText = select_data2;
  1333. param = cmd.Parameters.Add ("type_decimal2", OdbcType.Decimal);
  1334. param.Value = 4456.432m;
  1335. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1336. param.Value = 1;
  1337. dr = cmd.ExecuteReader ();
  1338. Assert.IsTrue (dr.Read (), "#C1");
  1339. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  1340. Assert.AreEqual (1, dr.GetValue (0), "#C3");
  1341. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#C4");
  1342. Assert.AreEqual (4456.432m, dr.GetValue (1), "#C5");
  1343. Assert.IsFalse (dr.Read (), "#C6");
  1344. dr.Close ();
  1345. cmd.Dispose ();
  1346. cmd = (OdbcCommand) conn.CreateCommand ();
  1347. cmd.CommandText = select_data2;
  1348. param = cmd.Parameters.Add ("type_decimal2", OdbcType.Decimal);
  1349. param.Value = -4456.432m;
  1350. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1351. param.Value = 2;
  1352. dr = cmd.ExecuteReader ();
  1353. Assert.IsTrue (dr.Read (), "#D1");
  1354. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  1355. Assert.AreEqual (2, dr.GetValue (0), "#D3");
  1356. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#D4");
  1357. Assert.AreEqual (-4456.432m, dr.GetValue (1), "#D5");
  1358. Assert.IsFalse (dr.Read (), "#D6");
  1359. dr.Close ();
  1360. cmd.Dispose ();
  1361. cmd = (OdbcCommand) conn.CreateCommand ();
  1362. cmd.CommandText = select_data1;
  1363. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1364. param.Value = 0m;
  1365. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1366. param.Value = 3;
  1367. dr = cmd.ExecuteReader ();
  1368. Assert.IsTrue (dr.Read (), "#E1");
  1369. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  1370. Assert.AreEqual (3, dr.GetValue (0), "#E3");
  1371. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#E4");
  1372. Assert.AreEqual (0m, dr.GetValue (1), "#E5");
  1373. Assert.IsFalse (dr.Read (), "#E6");
  1374. dr.Close ();
  1375. cmd.Dispose ();
  1376. cmd = (OdbcCommand) conn.CreateCommand ();
  1377. cmd.CommandText = select_data1;
  1378. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1379. param.Value = DBNull.Value;
  1380. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1381. param.Value = 4;
  1382. dr = cmd.ExecuteReader ();
  1383. Assert.IsFalse (dr.Read (), "#F");
  1384. dr.Close ();
  1385. cmd.Dispose ();
  1386. cmd = (OdbcCommand) conn.CreateCommand ();
  1387. cmd.CommandText = select_by_id;
  1388. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1389. param.Value = 4;
  1390. dr = cmd.ExecuteReader ();
  1391. Assert.IsTrue (dr.Read (), "#G1");
  1392. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  1393. Assert.AreEqual (4, dr.GetValue (0), "#G3");
  1394. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#G4");
  1395. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#G5");
  1396. Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#G6");
  1397. Assert.AreEqual (DBNull.Value, dr.GetValue (2), "#G7");
  1398. Assert.IsFalse (dr.Read (), "#G8");
  1399. dr.Close ();
  1400. cmd.Dispose ();
  1401. cmd = (OdbcCommand) conn.CreateCommand ();
  1402. cmd.CommandText = insert_data;
  1403. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1404. param.Value = -1000.5678m;
  1405. param = cmd.Parameters.Add ("type_decimal2", OdbcType.Decimal);
  1406. param.Value = -1000.5678m;
  1407. cmd.ExecuteNonQuery ();
  1408. cmd.Dispose ();
  1409. cmd = (OdbcCommand) conn.CreateCommand ();
  1410. cmd.CommandText = select_data1;
  1411. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1412. param.Value = -1000.5678m;
  1413. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1414. param.Value = 6000;
  1415. dr = cmd.ExecuteReader ();
  1416. Assert.IsFalse (dr.Read (), "#H");
  1417. dr.Close ();
  1418. cmd.Dispose ();
  1419. cmd = (OdbcCommand) conn.CreateCommand ();
  1420. cmd.CommandText = select_data1;
  1421. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1422. param.Value = -1001;
  1423. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1424. param.Value = 6000;
  1425. dr = cmd.ExecuteReader ();
  1426. Assert.IsTrue (dr.Read (), "#I1");
  1427. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#I2");
  1428. Assert.AreEqual (6000, dr.GetValue (0), "#I3");
  1429. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#I4");
  1430. Assert.AreEqual (-1001m, dr.GetValue (1), "#I5");
  1431. Assert.IsFalse (dr.Read (), "#I6");
  1432. dr.Close ();
  1433. cmd.Dispose ();
  1434. cmd = (OdbcCommand) conn.CreateCommand ();
  1435. cmd.CommandText = select_data2;
  1436. param = cmd.Parameters.Add ("type_decimal2", OdbcType.Decimal);
  1437. param.Value = -1000.5678m;
  1438. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1439. param.Value = 6000;
  1440. dr = cmd.ExecuteReader ();
  1441. Assert.IsFalse (dr.Read (), "#J");
  1442. dr.Close ();
  1443. cmd.Dispose ();
  1444. cmd = (OdbcCommand) conn.CreateCommand ();
  1445. cmd.CommandText = select_data2;
  1446. param = cmd.Parameters.Add ("type_decimal2", OdbcType.Decimal);
  1447. param.Value = -1000.568m;
  1448. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1449. param.Value = 6000;
  1450. dr = cmd.ExecuteReader ();
  1451. Assert.IsTrue (dr.Read (), "#K1");
  1452. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#K2");
  1453. Assert.AreEqual (6000, dr.GetValue (0), "#K3");
  1454. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#K4");
  1455. Assert.AreEqual (-1000.568m, dr.GetValue (1), "#K5");
  1456. Assert.IsFalse (dr.Read (), "#K6");
  1457. dr.Close ();
  1458. cmd.Dispose ();
  1459. DBHelper.ExecuteNonQuery (conn, delete_data);
  1460. cmd = (OdbcCommand) conn.CreateCommand ();
  1461. cmd.CommandText = insert_data;
  1462. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1463. param.Value = 56789m;
  1464. param.Precision = 7;
  1465. param.Scale = 2;
  1466. param = cmd.Parameters.Add ("type_decimal2", OdbcType.Decimal);
  1467. param.Value = 98765.5678m;
  1468. param.Precision = 10;
  1469. param.Scale = 2;
  1470. cmd.ExecuteNonQuery ();
  1471. cmd.Dispose ();
  1472. cmd = (OdbcCommand) conn.CreateCommand ();
  1473. cmd.CommandText = select_by_id;
  1474. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1475. param.Value = 6000;
  1476. dr = cmd.ExecuteReader ();
  1477. Assert.IsTrue (dr.Read (), "#L1");
  1478. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#L2");
  1479. Assert.AreEqual (6000, dr.GetValue (0), "#L3");
  1480. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#L4");
  1481. Assert.AreEqual (56789m, dr.GetValue (1), "#L5");
  1482. Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#L6");
  1483. if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
  1484. Assert.AreEqual (9876556.780m, dr.GetValue (2), "#L7");
  1485. else
  1486. Assert.AreEqual (98765.570m, dr.GetValue (2), "#L7");
  1487. Assert.IsFalse (dr.Read (), "#L8");
  1488. dr.Close ();
  1489. cmd.Dispose ();
  1490. DBHelper.ExecuteNonQuery (conn, delete_data);
  1491. cmd = (OdbcCommand) conn.CreateCommand ();
  1492. cmd.CommandText = insert_data;
  1493. param = cmd.Parameters.Add ("type_decimal1", OdbcType.Decimal);
  1494. param.Value = DBNull.Value;
  1495. param = cmd.Parameters.Add ("type_decimal2", OdbcType.Decimal);
  1496. param.Value = DBNull.Value;
  1497. cmd.ExecuteNonQuery ();
  1498. cmd.Dispose ();
  1499. cmd = (OdbcCommand) conn.CreateCommand ();
  1500. cmd.CommandText = select_by_id;
  1501. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1502. param.Value = 6000;
  1503. dr = cmd.ExecuteReader ();
  1504. Assert.IsTrue (dr.Read (), "#M1");
  1505. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#M2");
  1506. Assert.AreEqual (6000, dr.GetValue (0), "#M3");
  1507. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#M4");
  1508. if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
  1509. Assert.AreEqual (0m, dr.GetValue (1), "#M5");
  1510. else
  1511. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#M5");
  1512. Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#M6");
  1513. if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
  1514. Assert.AreEqual (0m, dr.GetValue (1), "#M7");
  1515. else
  1516. Assert.AreEqual (DBNull.Value, dr.GetValue (2), "#M7");
  1517. Assert.IsFalse (dr.Read (), "#M8");
  1518. dr.Close ();
  1519. cmd.Dispose ();
  1520. } finally {
  1521. if (cmd != null)
  1522. cmd.Dispose ();
  1523. if (dr != null)
  1524. dr.Close ();
  1525. conn.Close ();
  1526. conn.Open ();
  1527. DBHelper.ExecuteNonQuery (conn, delete_data);
  1528. conn.Close ();
  1529. }
  1530. }
  1531. [Test]
  1532. public void DoubleParameterTest ()
  1533. {
  1534. string insert_data = "insert into numeric_family (id, type_double) values (6000, ?)";
  1535. string select_data = "select id, type_double from numeric_family where type_double = ? and id = ?";
  1536. string select_by_id = "select id, type_double from numeric_family where id = ?";
  1537. string delete_data = "delete from numeric_family where id = 6000";
  1538. IDbConnection conn = ConnectionManager.Singleton.Connection;
  1539. conn.Open ();
  1540. IDataReader dr = null;
  1541. OdbcCommand cmd = null;
  1542. OdbcParameter param;
  1543. try {
  1544. cmd = (OdbcCommand) conn.CreateCommand ();
  1545. cmd.CommandText = select_data;
  1546. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1547. param.Value = 1.79E+308;
  1548. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1549. param.Value = 1;
  1550. dr = cmd.ExecuteReader ();
  1551. Assert.IsTrue (dr.Read (), "#A1");
  1552. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  1553. Assert.AreEqual (1, dr.GetValue (0), "#A3");
  1554. Assert.AreEqual (typeof (double), dr.GetFieldType (1), "#A4");
  1555. Assert.AreEqual (1.79E+308, dr.GetValue (1), "#A5");
  1556. Assert.IsFalse (dr.Read (), "#A6");
  1557. dr.Close ();
  1558. cmd.Dispose ();
  1559. cmd = (OdbcCommand) conn.CreateCommand ();
  1560. cmd.CommandText = select_data;
  1561. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1562. param.Value = -1.79E+308;
  1563. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1564. param.Value = 2;
  1565. dr = cmd.ExecuteReader ();
  1566. Assert.IsTrue (dr.Read (), "#B1");
  1567. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  1568. Assert.AreEqual (2, dr.GetValue (0), "#B3");
  1569. Assert.AreEqual (typeof (double), dr.GetFieldType (1), "#B4");
  1570. Assert.AreEqual (-1.79E+308, dr.GetValue (1), "#B5");
  1571. Assert.IsFalse (dr.Read (), "#B6");
  1572. dr.Close ();
  1573. cmd.Dispose ();
  1574. cmd = (OdbcCommand) conn.CreateCommand ();
  1575. cmd.CommandText = select_data;
  1576. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1577. param.Value = 0d;
  1578. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1579. param.Value = 3;
  1580. dr = cmd.ExecuteReader ();
  1581. Assert.IsTrue (dr.Read (), "#C1");
  1582. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  1583. Assert.AreEqual (3, dr.GetValue (0), "#C3");
  1584. Assert.AreEqual (typeof (double), dr.GetFieldType (1), "#C4");
  1585. Assert.AreEqual (0d, dr.GetValue (1), "#C5");
  1586. Assert.IsFalse (dr.Read (), "#C6");
  1587. dr.Close ();
  1588. cmd.Dispose ();
  1589. cmd = (OdbcCommand) conn.CreateCommand ();
  1590. cmd.CommandText = select_by_id;
  1591. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1592. param.Value = 4;
  1593. dr = cmd.ExecuteReader ();
  1594. Assert.IsTrue (dr.Read (), "#D1");
  1595. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  1596. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  1597. Assert.AreEqual (typeof (double), dr.GetFieldType (1), "#D4");
  1598. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  1599. Assert.IsFalse (dr.Read (), "#D6");
  1600. dr.Close ();
  1601. cmd.Dispose ();
  1602. cmd = (OdbcCommand) conn.CreateCommand ();
  1603. cmd.CommandText = insert_data;
  1604. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1605. param.Value = 1.79E+308;
  1606. cmd.ExecuteNonQuery ();
  1607. cmd.Dispose ();
  1608. cmd = (OdbcCommand) conn.CreateCommand ();
  1609. cmd.CommandText = select_data;
  1610. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1611. param.Value = 1.79E+308;
  1612. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1613. param.Value = 6000;
  1614. dr = cmd.ExecuteReader ();
  1615. Assert.IsTrue (dr.Read (), "#E1");
  1616. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  1617. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  1618. Assert.AreEqual (typeof (double), dr.GetFieldType (1), "#E4");
  1619. Assert.AreEqual (1.79E+308, dr.GetValue (1), "#E5");
  1620. Assert.IsFalse (dr.Read (), "#E6");
  1621. dr.Close ();
  1622. cmd.Dispose ();
  1623. DBHelper.ExecuteNonQuery (conn, delete_data);
  1624. cmd = (OdbcCommand) conn.CreateCommand ();
  1625. cmd.CommandText = insert_data;
  1626. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1627. param.Value = -1.79E+308;
  1628. cmd.ExecuteNonQuery ();
  1629. cmd.Dispose ();
  1630. cmd = (OdbcCommand) conn.CreateCommand ();
  1631. cmd.CommandText = select_data;
  1632. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1633. param.Value = -1.79E+308;
  1634. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1635. param.Value = 6000;
  1636. dr = cmd.ExecuteReader ();
  1637. Assert.IsTrue (dr.Read (), "#F1");
  1638. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  1639. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  1640. Assert.AreEqual (typeof (double), dr.GetFieldType (1), "#F4");
  1641. Assert.AreEqual (-1.79E+308, dr.GetValue (1), "#F5");
  1642. Assert.IsFalse (dr.Read (), "#F6");
  1643. dr.Close ();
  1644. cmd.Dispose ();
  1645. DBHelper.ExecuteNonQuery (conn, delete_data);
  1646. cmd = (OdbcCommand) conn.CreateCommand ();
  1647. cmd.CommandText = insert_data;
  1648. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1649. param.Value = "45543,55";
  1650. cmd.ExecuteNonQuery ();
  1651. cmd.Dispose ();
  1652. cmd = (OdbcCommand) conn.CreateCommand ();
  1653. cmd.CommandText = select_data;
  1654. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1655. param.Value = "45543,55";
  1656. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1657. param.Value = 6000;
  1658. dr = cmd.ExecuteReader ();
  1659. Assert.IsTrue (dr.Read (), "#G1");
  1660. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  1661. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  1662. Assert.AreEqual (typeof (double), dr.GetFieldType (1), "#G4");
  1663. Assert.AreEqual (45543.55d, dr.GetValue (1), "#G5");
  1664. Assert.IsFalse (dr.Read (), "#G6");
  1665. dr.Close ();
  1666. cmd.Dispose ();
  1667. DBHelper.ExecuteNonQuery (conn, delete_data);
  1668. cmd = (OdbcCommand) conn.CreateCommand ();
  1669. cmd.CommandText = insert_data;
  1670. param = cmd.Parameters.Add ("type_double", OdbcType.Double);
  1671. param.Value = DBNull.Value;
  1672. cmd.ExecuteNonQuery ();
  1673. cmd.Dispose ();
  1674. cmd = (OdbcCommand) conn.CreateCommand ();
  1675. cmd.CommandText = select_by_id;
  1676. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1677. param.Value = 6000;
  1678. dr = cmd.ExecuteReader ();
  1679. Assert.IsTrue (dr.Read (), "#H1");
  1680. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  1681. Assert.AreEqual (6000, dr.GetValue (0), "#H3");
  1682. Assert.AreEqual (typeof (double), dr.GetFieldType (1), "#H4");
  1683. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#H5");
  1684. Assert.IsFalse (dr.Read (), "#H6");
  1685. dr.Close ();
  1686. cmd.Dispose ();
  1687. } finally {
  1688. if (dr != null)
  1689. dr.Close ();
  1690. if (cmd != null)
  1691. cmd.Dispose ();
  1692. conn.Close ();
  1693. conn.Open ();
  1694. DBHelper.ExecuteNonQuery (conn, delete_data);
  1695. conn.Close ();
  1696. }
  1697. }
  1698. [Test]
  1699. public void ImageParameterTest ()
  1700. {
  1701. string insert_data = "insert into binary_family (id, type_blob) values (6000, ?)";
  1702. string select_data = "select type_blob from binary_family where id = ?";
  1703. string delete_data = "delete from binary_family where id = 6000";
  1704. IDbConnection conn = ConnectionManager.Singleton.Connection;
  1705. conn.Open ();
  1706. IDataReader dr = null;
  1707. OdbcCommand cmd = null;
  1708. OdbcParameter param;
  1709. try {
  1710. byte [] bytes = new byte [] { 0x32, 0x56, 0x00,
  1711. 0x44, 0x22 };
  1712. cmd = (OdbcCommand) conn.CreateCommand ();
  1713. cmd.CommandText = select_data;
  1714. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1715. param.Value = 1;
  1716. dr = cmd.ExecuteReader ();
  1717. Assert.IsTrue (dr.Read (), "#A1");
  1718. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#A2");
  1719. Assert.AreEqual (bytes, dr.GetValue (0), "#A3");
  1720. Assert.IsFalse (dr.Read (), "#A4");
  1721. dr.Close ();
  1722. cmd.Dispose ();
  1723. bytes = new byte [] { 0x00, 0x66, 0x06, 0x66,
  1724. 0x97, 0x00, 0x66, 0x06, 0x66, 0x97, 0x06,
  1725. 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
  1726. 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
  1727. 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
  1728. 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
  1729. 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
  1730. 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
  1731. 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
  1732. 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
  1733. 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
  1734. 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
  1735. 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
  1736. 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
  1737. 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
  1738. 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
  1739. 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
  1740. 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
  1741. 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
  1742. 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
  1743. 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
  1744. 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
  1745. 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
  1746. 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
  1747. 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
  1748. 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
  1749. 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
  1750. 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
  1751. 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
  1752. 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
  1753. 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
  1754. 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
  1755. 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
  1756. 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
  1757. 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
  1758. 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
  1759. 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
  1760. 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
  1761. 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
  1762. 0x06, 0x66, 0x06, 0x66, 0x98};
  1763. cmd = (OdbcCommand) conn.CreateCommand ();
  1764. cmd.CommandText = select_data;
  1765. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1766. param.Value = 2;
  1767. dr = cmd.ExecuteReader ();
  1768. Assert.IsTrue (dr.Read (), "#B1");
  1769. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#B2");
  1770. Assert.AreEqual (bytes, dr.GetValue (0), "#B3");
  1771. Assert.IsFalse (dr.Read (), "#B4");
  1772. dr.Close ();
  1773. cmd.Dispose ();
  1774. bytes = new byte [8];
  1775. cmd = (OdbcCommand) conn.CreateCommand ();
  1776. cmd.CommandText = select_data;
  1777. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1778. param.Value = 3;
  1779. dr = cmd.ExecuteReader ();
  1780. Assert.IsTrue (dr.Read (), "#C1");
  1781. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#C2");
  1782. Assert.AreEqual (new byte [0], dr.GetValue (0), "#C3");
  1783. Assert.IsFalse (dr.Read (), "#C4");
  1784. dr.Close ();
  1785. cmd.Dispose ();
  1786. cmd = (OdbcCommand) conn.CreateCommand ();
  1787. cmd.CommandText = select_data;
  1788. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1789. param.Value = 4;
  1790. dr = cmd.ExecuteReader ();
  1791. Assert.IsTrue (dr.Read (), "#D1");
  1792. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#D2");
  1793. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#D3");
  1794. Assert.IsFalse (dr.Read (), "#D4");
  1795. dr.Close ();
  1796. cmd.Dispose ();
  1797. bytes = new byte [0];
  1798. cmd = (OdbcCommand) conn.CreateCommand ();
  1799. cmd.CommandText = insert_data;
  1800. param = cmd.Parameters.Add ("type_blob", OdbcType.Image);
  1801. param.Value = bytes;
  1802. cmd.ExecuteNonQuery ();
  1803. cmd.Dispose ();
  1804. cmd = (OdbcCommand) conn.CreateCommand ();
  1805. cmd.CommandText = select_data;
  1806. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1807. param.Value = 6000;
  1808. dr = cmd.ExecuteReader ();
  1809. Assert.IsTrue (dr.Read (), "#E1");
  1810. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#E2");
  1811. Assert.AreEqual (bytes, dr.GetValue (0), "#E3");
  1812. Assert.IsFalse (dr.Read (), "#E4");
  1813. dr.Close ();
  1814. cmd.Dispose ();
  1815. DBHelper.ExecuteNonQuery (conn, delete_data);
  1816. bytes = new byte [] { 0x05 };
  1817. cmd = (OdbcCommand) conn.CreateCommand ();
  1818. cmd.CommandText = insert_data;
  1819. param = cmd.Parameters.Add ("type_blob", OdbcType.Image);
  1820. param.Value = bytes;
  1821. cmd.ExecuteNonQuery ();
  1822. cmd.Dispose ();
  1823. cmd = (OdbcCommand) conn.CreateCommand ();
  1824. cmd.CommandText = select_data;
  1825. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1826. param.Value = 6000;
  1827. dr = cmd.ExecuteReader ();
  1828. Assert.IsTrue (dr.Read (), "#F1");
  1829. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#F2");
  1830. Assert.AreEqual (bytes, dr.GetValue (0), "#F3");
  1831. Assert.IsFalse (dr.Read (), "#F4");
  1832. dr.Close ();
  1833. cmd.Dispose ();
  1834. DBHelper.ExecuteNonQuery (conn, delete_data);
  1835. bytes = new byte [] { 0x34, 0x00, 0x32 };
  1836. cmd = (OdbcCommand) conn.CreateCommand ();
  1837. cmd.CommandText = insert_data;
  1838. param = cmd.Parameters.Add ("type_blob", OdbcType.Image);
  1839. param.Value = bytes;
  1840. cmd.ExecuteNonQuery ();
  1841. cmd.Dispose ();
  1842. cmd = (OdbcCommand) conn.CreateCommand ();
  1843. cmd.CommandText = select_data;
  1844. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1845. param.Value = 6000;
  1846. dr = cmd.ExecuteReader ();
  1847. Assert.IsTrue (dr.Read (), "#G1");
  1848. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#G2");
  1849. Assert.AreEqual (bytes, dr.GetValue (0), "#G3");
  1850. Assert.IsFalse (dr.Read (), "#G4");
  1851. dr.Close ();
  1852. cmd.Dispose ();
  1853. DBHelper.ExecuteNonQuery (conn, delete_data);
  1854. bytes = new byte [] { 0x34, 0x00, 0x32, 0x05, 0x07, 0x13 };
  1855. cmd = (OdbcCommand) conn.CreateCommand ();
  1856. cmd.CommandText = insert_data;
  1857. param = cmd.Parameters.Add ("type_blob", OdbcType.Image, 4);
  1858. param.Value = bytes;
  1859. cmd.ExecuteNonQuery ();
  1860. cmd.Dispose ();
  1861. cmd = (OdbcCommand) conn.CreateCommand ();
  1862. cmd.CommandText = select_data;
  1863. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1864. param.Value = 6000;
  1865. dr = cmd.ExecuteReader ();
  1866. Assert.IsTrue (dr.Read (), "#H1");
  1867. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#H2");
  1868. Assert.AreEqual (new byte [] { 0x34, 0x00, 0x32, 0x05 }, dr.GetValue (0), "#H3");
  1869. Assert.IsFalse (dr.Read (), "#H4");
  1870. dr.Close ();
  1871. cmd.Dispose ();
  1872. DBHelper.ExecuteNonQuery (conn, delete_data);
  1873. cmd = (OdbcCommand) conn.CreateCommand ();
  1874. cmd.CommandText = insert_data;
  1875. param = cmd.Parameters.Add ("type_blob", OdbcType.Image);
  1876. param.Value = DBNull.Value;
  1877. cmd.ExecuteNonQuery ();
  1878. cmd.Dispose ();
  1879. cmd = (OdbcCommand) conn.CreateCommand ();
  1880. cmd.CommandText = select_data;
  1881. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1882. param.Value = 6000;
  1883. dr = cmd.ExecuteReader ();
  1884. Assert.IsTrue (dr.Read (), "#I1");
  1885. Assert.AreEqual (typeof (byte []), dr.GetFieldType (0), "#I2");
  1886. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#I3");
  1887. Assert.IsFalse (dr.Read (), "#I4");
  1888. dr.Close ();
  1889. cmd.Dispose ();
  1890. } finally {
  1891. if (dr != null)
  1892. dr.Close ();
  1893. if (cmd != null)
  1894. cmd.Dispose ();
  1895. conn.Close ();
  1896. conn.Open ();
  1897. DBHelper.ExecuteNonQuery (conn, delete_data);
  1898. conn.Close ();
  1899. }
  1900. }
  1901. [Test]
  1902. public void NCharParameterTest ()
  1903. {
  1904. string insert_data = "insert into string_family (id, type_nchar) values (6000, ?)";
  1905. string select_data = "select type_nchar from string_family where type_nchar = ? and id = ?";
  1906. string select_by_id = "select type_nchar from string_family where id = ?";
  1907. string delete_data = "delete from string_family where id = 6000";
  1908. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  1909. conn.Open ();
  1910. IDataReader dr = null;
  1911. OdbcCommand cmd = null;
  1912. OdbcParameter param;
  1913. try {
  1914. cmd = conn.CreateCommand ();
  1915. cmd.CommandText = select_data;
  1916. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  1917. param.Value = "nch\u092d\u093er";
  1918. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1919. param.Value = 1;
  1920. dr = cmd.ExecuteReader ();
  1921. Assert.IsTrue (dr.Read (), "#A1");
  1922. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#A2");
  1923. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  1924. Assert.AreEqual ("nch\u092d\u093er", dr.GetValue (0), "#A3");
  1925. else
  1926. Assert.AreEqual ("nch\u092d\u093er ", dr.GetValue (0), "#A3");
  1927. Assert.IsFalse (dr.Read (), "#A4");
  1928. dr.Close ();
  1929. cmd.Dispose ();
  1930. cmd = conn.CreateCommand ();
  1931. cmd.CommandText = select_data;
  1932. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  1933. param.Value = "0123456789";
  1934. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1935. param.Value = 2;
  1936. dr = cmd.ExecuteReader ();
  1937. Assert.IsTrue (dr.Read (), "#B1");
  1938. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#B2");
  1939. Assert.AreEqual ("0123456789", dr.GetValue (0), "#B3");
  1940. Assert.IsFalse (dr.Read (), "#B4");
  1941. dr.Close ();
  1942. cmd.Dispose ();
  1943. cmd = conn.CreateCommand ();
  1944. cmd.CommandText = select_data;
  1945. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  1946. param.Value = string.Empty;
  1947. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1948. param.Value = 3;
  1949. dr = cmd.ExecuteReader ();
  1950. Assert.IsTrue (dr.Read (), "#C1");
  1951. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#C2");
  1952. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  1953. Assert.AreEqual (string.Empty, dr.GetValue (0), "#C3");
  1954. else
  1955. Assert.AreEqual (" ", dr.GetValue (0), "#C3");
  1956. Assert.IsFalse (dr.Read (), "#C4");
  1957. dr.Close ();
  1958. cmd.Dispose ();
  1959. cmd = conn.CreateCommand ();
  1960. cmd.CommandText = select_by_id;
  1961. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1962. param.Value = 4;
  1963. dr = cmd.ExecuteReader ();
  1964. Assert.IsTrue (dr.Read (), "#D1");
  1965. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#D2");
  1966. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#D3");
  1967. Assert.IsFalse (dr.Read (), "#D4");
  1968. dr.Close ();
  1969. cmd.Dispose ();
  1970. cmd = conn.CreateCommand ();
  1971. cmd.CommandText = insert_data;
  1972. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  1973. param.Value = "nchar";
  1974. cmd.ExecuteNonQuery ();
  1975. cmd.Dispose ();
  1976. cmd = conn.CreateCommand ();
  1977. cmd.CommandText = select_data;
  1978. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  1979. param.Value = "nchar";
  1980. param = cmd.Parameters.Add ("id", OdbcType.Int);
  1981. param.Value = 6000;
  1982. dr = cmd.ExecuteReader ();
  1983. Assert.IsTrue (dr.Read (), "#E1");
  1984. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#E2");
  1985. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  1986. Assert.AreEqual ("nchar", dr.GetValue (0), "#E3");
  1987. else
  1988. Assert.AreEqual ("nchar ", dr.GetValue (0), "#E3");
  1989. Assert.IsFalse (dr.Read (), "#E4");
  1990. dr.Close ();
  1991. cmd.Dispose ();
  1992. DBHelper.ExecuteNonQuery (conn, delete_data);
  1993. cmd = conn.CreateCommand ();
  1994. cmd.CommandText = insert_data;
  1995. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar, 4);
  1996. param.Value = "nch\u0488r";
  1997. cmd.ExecuteNonQuery ();
  1998. cmd.Dispose ();
  1999. cmd = conn.CreateCommand ();
  2000. cmd.CommandText = select_data;
  2001. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar, 4);
  2002. param.Value = "nch\u0488r";
  2003. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2004. param.Value = 6000;
  2005. dr = cmd.ExecuteReader ();
  2006. Assert.IsTrue (dr.Read (), "#F1");
  2007. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#F2");
  2008. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  2009. Assert.AreEqual ("nch\u0488", dr.GetValue (0), "#F3");
  2010. else
  2011. Assert.AreEqual ("nch\u0488 ", dr.GetValue (0), "#F3");
  2012. Assert.IsFalse (dr.Read (), "#F4");
  2013. dr.Close ();
  2014. cmd.Dispose ();
  2015. DBHelper.ExecuteNonQuery (conn, delete_data);
  2016. cmd = conn.CreateCommand ();
  2017. cmd.CommandText = insert_data;
  2018. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar, 8);
  2019. param.Value = "ch\u0488r";
  2020. cmd.ExecuteNonQuery ();
  2021. cmd.Dispose ();
  2022. cmd = conn.CreateCommand ();
  2023. cmd.CommandText = select_data;
  2024. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  2025. param.Value = "ch\u0488r";
  2026. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2027. param.Value = 6000;
  2028. dr = cmd.ExecuteReader ();
  2029. Assert.IsTrue (dr.Read (), "#G1");
  2030. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#G2");
  2031. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  2032. Assert.AreEqual ("ch\u0488r", dr.GetValue (0), "#G3");
  2033. else
  2034. Assert.AreEqual ("ch\u0488r ", dr.GetValue (0), "#G3");
  2035. Assert.IsFalse (dr.Read (), "#G4");
  2036. dr.Close ();
  2037. cmd.Dispose ();
  2038. DBHelper.ExecuteNonQuery (conn, delete_data);
  2039. cmd = conn.CreateCommand ();
  2040. cmd.CommandText = insert_data;
  2041. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar, 15);
  2042. param.Value = "0123456789";
  2043. cmd.ExecuteNonQuery ();
  2044. cmd.Dispose ();
  2045. cmd = conn.CreateCommand ();
  2046. cmd.CommandText = select_data;
  2047. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  2048. param.Value = "0123456789";
  2049. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2050. param.Value = 6000;
  2051. dr = cmd.ExecuteReader ();
  2052. Assert.IsTrue (dr.Read (), "#H1");
  2053. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#H2");
  2054. Assert.AreEqual ("0123456789", dr.GetValue (0), "#H3");
  2055. Assert.IsFalse (dr.Read (), "#H4");
  2056. dr.Close ();
  2057. cmd.Dispose ();
  2058. DBHelper.ExecuteNonQuery (conn, delete_data);
  2059. cmd = conn.CreateCommand ();
  2060. cmd.CommandText = insert_data;
  2061. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar, 15);
  2062. param.Value = string.Empty;
  2063. cmd.ExecuteNonQuery ();
  2064. cmd.Dispose ();
  2065. cmd = conn.CreateCommand ();
  2066. cmd.CommandText = select_data;
  2067. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  2068. param.Value = string.Empty;
  2069. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2070. param.Value = 6000;
  2071. dr = cmd.ExecuteReader ();
  2072. Assert.IsTrue (dr.Read (), "#I1");
  2073. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#I2");
  2074. if (ConnectionManager.Singleton.Engine.RemovesTrailingSpaces)
  2075. Assert.AreEqual (string.Empty, dr.GetValue (0), "#I3");
  2076. else
  2077. Assert.AreEqual (" ", dr.GetValue (0), "#I3");
  2078. Assert.IsFalse (dr.Read (), "#I4");
  2079. dr.Close ();
  2080. cmd.Dispose ();
  2081. DBHelper.ExecuteNonQuery (conn, delete_data);
  2082. cmd = conn.CreateCommand ();
  2083. cmd.CommandText = insert_data;
  2084. param = cmd.Parameters.Add ("type_nchar", OdbcType.NChar);
  2085. param.Value = DBNull.Value;
  2086. cmd.ExecuteNonQuery ();
  2087. cmd.Dispose ();
  2088. cmd = conn.CreateCommand ();
  2089. cmd.CommandText = select_by_id;
  2090. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2091. param.Value = 6000;
  2092. dr = cmd.ExecuteReader ();
  2093. Assert.IsTrue (dr.Read (), "#J1");
  2094. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#J2");
  2095. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#J3");
  2096. Assert.IsFalse (dr.Read (), "#J4");
  2097. dr.Close ();
  2098. cmd.Dispose ();
  2099. } finally {
  2100. if (dr != null)
  2101. dr.Close ();
  2102. if (cmd != null)
  2103. cmd.Dispose ();
  2104. conn.Close ();
  2105. conn.Open ();
  2106. DBHelper.ExecuteNonQuery (conn, delete_data);
  2107. conn.Close ();;
  2108. }
  2109. }
  2110. [Test]
  2111. public void NTextParameterTest ()
  2112. {
  2113. string insert_data = "insert into string_family (id, type_ntext) values (6000, ?)";
  2114. string select_by_id = "select type_ntext from string_family where id = ?";
  2115. string delete_data = "delete from string_family where id = 6000";
  2116. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  2117. conn.Open ();
  2118. IDataReader dr = null;
  2119. OdbcCommand cmd = null;
  2120. OdbcParameter param;
  2121. try {
  2122. cmd = conn.CreateCommand ();
  2123. cmd.CommandText = select_by_id;
  2124. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2125. param.Value = 1;
  2126. dr = cmd.ExecuteReader ();
  2127. Assert.IsTrue (dr.Read (), "#A1");
  2128. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#A2");
  2129. Assert.AreEqual ("nt\u092d\u093ext", dr.GetValue (0), "#A3");
  2130. Assert.IsFalse (dr.Read (), "#A4");
  2131. dr.Close ();
  2132. cmd.Dispose ();
  2133. cmd = conn.CreateCommand ();
  2134. cmd.CommandText = select_by_id;
  2135. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2136. param.Value = 2;
  2137. dr = cmd.ExecuteReader ();
  2138. Assert.IsTrue (dr.Read (), "#B1");
  2139. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#B2");
  2140. Assert.AreEqual ("nt\u092d\u093ext ", dr.GetValue (0), "#B3");
  2141. Assert.IsFalse (dr.Read (), "#B4");
  2142. dr.Close ();
  2143. cmd.Dispose ();
  2144. cmd = conn.CreateCommand ();
  2145. cmd.CommandText = select_by_id;
  2146. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2147. param.Value = 3;
  2148. dr = cmd.ExecuteReader ();
  2149. Assert.IsTrue (dr.Read (), "#C1");
  2150. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#C2");
  2151. Assert.AreEqual (string.Empty, dr.GetValue (0), "#C3");
  2152. Assert.IsFalse (dr.Read (), "#C4");
  2153. dr.Close ();
  2154. cmd.Dispose ();
  2155. cmd = conn.CreateCommand ();
  2156. cmd.CommandText = select_by_id;
  2157. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2158. param.Value = 4;
  2159. dr = cmd.ExecuteReader ();
  2160. Assert.IsTrue (dr.Read (), "#D1");
  2161. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#D2");
  2162. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#D3");
  2163. Assert.IsFalse (dr.Read (), "#D4");
  2164. dr.Close ();
  2165. cmd.Dispose ();
  2166. cmd = conn.CreateCommand ();
  2167. cmd.CommandText = insert_data;
  2168. param = cmd.Parameters.Add ("type_ntext", OdbcType.NText, 4);
  2169. param.Value = "nt\u0488xt";
  2170. cmd.ExecuteNonQuery ();
  2171. cmd.Dispose ();
  2172. cmd = (OdbcCommand) conn.CreateCommand ();
  2173. cmd.CommandText = select_by_id;
  2174. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2175. param.Value = 6000;
  2176. dr = cmd.ExecuteReader ();
  2177. Assert.IsTrue (dr.Read (), "#E1");
  2178. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#E2");
  2179. Assert.AreEqual ("nt\u0488x", dr.GetValue (0), "#E3");
  2180. Assert.IsFalse (dr.Read (), "#E4");
  2181. dr.Close ();
  2182. cmd.Dispose ();
  2183. DBHelper.ExecuteNonQuery (conn, delete_data);
  2184. cmd = conn.CreateCommand ();
  2185. cmd.CommandText = insert_data;
  2186. param = cmd.Parameters.Add ("type_ntext", OdbcType.NText, 15);
  2187. param.Value = "nt\u0488xt ";
  2188. cmd.ExecuteNonQuery ();
  2189. cmd.Dispose ();
  2190. cmd = (OdbcCommand) conn.CreateCommand ();
  2191. cmd.CommandText = select_by_id;
  2192. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2193. param.Value = 6000;
  2194. dr = cmd.ExecuteReader ();
  2195. Assert.IsTrue (dr.Read (), "#F1");
  2196. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#F2");
  2197. Assert.AreEqual ("nt\u0488xt ", dr.GetValue (0), "#F3");
  2198. Assert.IsFalse (dr.Read (), "#F4");
  2199. dr.Close ();
  2200. cmd.Dispose ();
  2201. DBHelper.ExecuteNonQuery (conn, delete_data);
  2202. cmd = (OdbcCommand) conn.CreateCommand ();
  2203. cmd.CommandText = insert_data;
  2204. param = cmd.Parameters.Add ("type_ntext", OdbcType.NText, 8);
  2205. param.Value = string.Empty;
  2206. cmd.ExecuteNonQuery ();
  2207. cmd.Dispose ();
  2208. cmd = (OdbcCommand) conn.CreateCommand ();
  2209. cmd.CommandText = select_by_id;
  2210. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2211. param.Value = 6000;
  2212. dr = cmd.ExecuteReader ();
  2213. Assert.IsTrue (dr.Read (), "#G1");
  2214. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#G2");
  2215. Assert.AreEqual (string.Empty, dr.GetValue (0), "#G3");
  2216. Assert.IsFalse (dr.Read (), "#G4");
  2217. dr.Close ();
  2218. cmd.Dispose ();
  2219. DBHelper.ExecuteNonQuery (conn, delete_data);
  2220. cmd = (OdbcCommand) conn.CreateCommand ();
  2221. cmd.CommandText = insert_data;
  2222. param = cmd.Parameters.Add ("type_ntext", OdbcType.NText, 8);
  2223. param.Value = DBNull.Value;
  2224. cmd.ExecuteNonQuery ();
  2225. cmd.Dispose ();
  2226. cmd = (OdbcCommand) conn.CreateCommand ();
  2227. cmd.CommandText = select_by_id;
  2228. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2229. param.Value = 6000;
  2230. dr = cmd.ExecuteReader ();
  2231. Assert.IsTrue (dr.Read (), "#H1");
  2232. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#H2");
  2233. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#H3");
  2234. Assert.IsFalse (dr.Read (), "#H4");
  2235. dr.Close ();
  2236. cmd.Dispose ();
  2237. } finally {
  2238. if (dr != null)
  2239. dr.Close ();
  2240. if (cmd != null)
  2241. cmd.Dispose ();
  2242. conn.Close ();
  2243. conn.Open ();
  2244. DBHelper.ExecuteNonQuery (conn, delete_data);
  2245. conn.Close ();
  2246. }
  2247. }
  2248. [Test]
  2249. public void TextParameterTest ()
  2250. {
  2251. string insert_data = "insert into string_family (id, type_text) values (6000, ?)";
  2252. string select_by_id = "select type_text from string_family where id = ?";
  2253. string delete_data = "delete from string_family where id = 6000";
  2254. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  2255. conn.Open ();
  2256. IDataReader dr = null;
  2257. OdbcCommand cmd = null;
  2258. OdbcParameter param;
  2259. try {
  2260. cmd = conn.CreateCommand ();
  2261. cmd.CommandText = select_by_id;
  2262. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2263. param.Value = 1;
  2264. dr = cmd.ExecuteReader ();
  2265. Assert.IsTrue (dr.Read (), "#A1");
  2266. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#A2");
  2267. Assert.AreEqual ("text", dr.GetValue (0), "#A3");
  2268. Assert.IsFalse (dr.Read (), "#A4");
  2269. dr.Close ();
  2270. cmd.Dispose ();
  2271. StringBuilder sb = new StringBuilder ();
  2272. for (int i = 0; i < 30; i++)
  2273. sb.Append ("longtext ");
  2274. cmd = conn.CreateCommand ();
  2275. cmd.CommandText = select_by_id;
  2276. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2277. param.Value = 2;
  2278. dr = cmd.ExecuteReader ();
  2279. Assert.IsTrue (dr.Read (), "#B1");
  2280. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#B2");
  2281. Assert.AreEqual (sb.ToString (), dr.GetValue (0), "#B3");
  2282. Assert.IsFalse (dr.Read (), "#B4");
  2283. dr.Close ();
  2284. cmd.Dispose ();
  2285. cmd = conn.CreateCommand ();
  2286. cmd.CommandText = select_by_id;
  2287. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2288. param.Value = 3;
  2289. dr = cmd.ExecuteReader ();
  2290. Assert.IsTrue (dr.Read (), "#C1");
  2291. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#C2");
  2292. Assert.AreEqual (string.Empty, dr.GetValue (0), "#C3");
  2293. Assert.IsFalse (dr.Read (), "#C4");
  2294. dr.Close ();
  2295. cmd.Dispose ();
  2296. cmd = conn.CreateCommand ();
  2297. cmd.CommandText = select_by_id;
  2298. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2299. param.Value = 4;
  2300. dr = cmd.ExecuteReader ();
  2301. Assert.IsTrue (dr.Read (), "#D1");
  2302. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#D2");
  2303. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#D3");
  2304. Assert.IsFalse (dr.Read (), "#D4");
  2305. dr.Close ();
  2306. cmd.Dispose ();
  2307. cmd = conn.CreateCommand ();
  2308. cmd.CommandText = insert_data;
  2309. param = cmd.Parameters.Add ("type_text", OdbcType.Text);
  2310. param.Value = sb.ToString ();
  2311. cmd.ExecuteNonQuery ();
  2312. cmd.Dispose ();
  2313. cmd = (OdbcCommand) conn.CreateCommand ();
  2314. cmd.CommandText = select_by_id;
  2315. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2316. param.Value = 6000;
  2317. dr = cmd.ExecuteReader ();
  2318. Assert.IsTrue (dr.Read (), "#E1");
  2319. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#E2");
  2320. Assert.AreEqual (sb.ToString (), dr.GetValue (0), "#E3");
  2321. Assert.IsFalse (dr.Read (), "#E4");
  2322. dr.Close ();
  2323. cmd.Dispose ();
  2324. DBHelper.ExecuteNonQuery (conn, delete_data);
  2325. cmd = conn.CreateCommand ();
  2326. cmd.CommandText = insert_data;
  2327. param = cmd.Parameters.Add ("type_text", OdbcType.Text, 2);
  2328. param.Value = "text";
  2329. cmd.ExecuteNonQuery ();
  2330. cmd.Dispose ();
  2331. cmd = (OdbcCommand) conn.CreateCommand ();
  2332. cmd.CommandText = select_by_id;
  2333. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2334. param.Value = 6000;
  2335. dr = cmd.ExecuteReader ();
  2336. Assert.IsTrue (dr.Read (), "#F1");
  2337. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#F2");
  2338. Assert.AreEqual ("te", dr.GetValue (0), "#F3");
  2339. Assert.IsFalse (dr.Read (), "#F4");
  2340. dr.Close ();
  2341. cmd.Dispose ();
  2342. DBHelper.ExecuteNonQuery (conn, delete_data);
  2343. cmd = (OdbcCommand) conn.CreateCommand ();
  2344. cmd.CommandText = insert_data;
  2345. param = cmd.Parameters.Add ("type_text", OdbcType.Text, 8);
  2346. param.Value = string.Empty;
  2347. cmd.ExecuteNonQuery ();
  2348. cmd.Dispose ();
  2349. cmd = (OdbcCommand) conn.CreateCommand ();
  2350. cmd.CommandText = select_by_id;
  2351. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2352. param.Value = 6000;
  2353. dr = cmd.ExecuteReader ();
  2354. Assert.IsTrue (dr.Read (), "#G1");
  2355. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#G2");
  2356. Assert.AreEqual (string.Empty, dr.GetValue (0), "#G3");
  2357. Assert.IsFalse (dr.Read (), "#G4");
  2358. dr.Close ();
  2359. cmd.Dispose ();
  2360. DBHelper.ExecuteNonQuery (conn, delete_data);
  2361. cmd = (OdbcCommand) conn.CreateCommand ();
  2362. cmd.CommandText = insert_data;
  2363. param = cmd.Parameters.Add ("type_text", OdbcType.Text, 8);
  2364. param.Value = DBNull.Value;
  2365. cmd.ExecuteNonQuery ();
  2366. cmd.Dispose ();
  2367. cmd = (OdbcCommand) conn.CreateCommand ();
  2368. cmd.CommandText = select_by_id;
  2369. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2370. param.Value = 6000;
  2371. dr = cmd.ExecuteReader ();
  2372. Assert.IsTrue (dr.Read (), "#H1");
  2373. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#H2");
  2374. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#H3");
  2375. Assert.IsFalse (dr.Read (), "#H4");
  2376. dr.Close ();
  2377. cmd.Dispose ();
  2378. } finally {
  2379. if (dr != null)
  2380. dr.Close ();
  2381. if (cmd != null)
  2382. cmd.Dispose ();
  2383. conn.Close ();
  2384. conn.Open ();
  2385. DBHelper.ExecuteNonQuery (conn, delete_data);
  2386. conn.Close ();
  2387. }
  2388. }
  2389. [Test]
  2390. public void NumericParameterTest ()
  2391. {
  2392. string select_data1 = "select id, type_numeric1 from numeric_family where type_numeric1 = ? and id = ?";
  2393. string select_data2 = "select id, type_numeric2 from numeric_family where type_numeric2 = ? and id = ?";
  2394. string select_by_id = "select id, type_numeric1, type_numeric2 from numeric_family where id = ?";
  2395. string insert_data = "insert into numeric_family (id, type_numeric1, type_numeric2) values (6000, ?, ?)";
  2396. string delete_data = "delete from numeric_family where id = 6000";
  2397. IDbConnection conn = ConnectionManager.Singleton.Connection;
  2398. conn.Open ();
  2399. IDataReader dr = null;
  2400. OdbcCommand cmd = null;
  2401. OdbcParameter param;
  2402. try {
  2403. cmd = (OdbcCommand) conn.CreateCommand ();
  2404. cmd.CommandText = select_data1;
  2405. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2406. param.Value = 1000.00m;
  2407. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2408. param.Value = 1;
  2409. dr = cmd.ExecuteReader ();
  2410. Assert.IsTrue (dr.Read (), "#A1");
  2411. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  2412. Assert.AreEqual (1, dr.GetValue (0), "#A3");
  2413. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#A4");
  2414. Assert.AreEqual (1000m, dr.GetValue (1), "#A5");
  2415. Assert.IsFalse (dr.Read (), "#A6");
  2416. dr.Close ();
  2417. cmd.Dispose ();
  2418. cmd = (OdbcCommand) conn.CreateCommand ();
  2419. cmd.CommandText = select_data1;
  2420. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2421. param.Value = -1000.00m;
  2422. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2423. param.Value = 2;
  2424. dr = cmd.ExecuteReader ();
  2425. Assert.IsTrue (dr.Read (), "#B1");
  2426. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  2427. Assert.AreEqual (2, dr.GetValue (0), "#B3");
  2428. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#B4");
  2429. Assert.AreEqual (-1000m, dr.GetValue (1), "#B5");
  2430. Assert.IsFalse (dr.Read (), "#B6");
  2431. dr.Close ();
  2432. cmd.Dispose ();
  2433. cmd = (OdbcCommand) conn.CreateCommand ();
  2434. cmd.CommandText = select_data2;
  2435. param = cmd.Parameters.Add ("type_numeric2", OdbcType.Numeric);
  2436. param.Value = 4456.432m;
  2437. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2438. param.Value = 1;
  2439. dr = cmd.ExecuteReader ();
  2440. Assert.IsTrue (dr.Read (), "#C1");
  2441. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  2442. Assert.AreEqual (1, dr.GetValue (0), "#C3");
  2443. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#C4");
  2444. Assert.AreEqual (4456.432m, dr.GetValue (1), "#C5");
  2445. Assert.IsFalse (dr.Read (), "#C6");
  2446. dr.Close ();
  2447. cmd.Dispose ();
  2448. cmd = (OdbcCommand) conn.CreateCommand ();
  2449. cmd.CommandText = select_data2;
  2450. param = cmd.Parameters.Add ("type_numeric2", OdbcType.Numeric);
  2451. param.Value = -4456.432m;
  2452. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2453. param.Value = 2;
  2454. dr = cmd.ExecuteReader ();
  2455. Assert.IsTrue (dr.Read (), "#D1");
  2456. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  2457. Assert.AreEqual (2, dr.GetValue (0), "#D3");
  2458. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#D4");
  2459. Assert.AreEqual (-4456.432m, dr.GetValue (1), "#D5");
  2460. Assert.IsFalse (dr.Read (), "#D6");
  2461. dr.Close ();
  2462. cmd.Dispose ();
  2463. cmd = (OdbcCommand) conn.CreateCommand ();
  2464. cmd.CommandText = select_data1;
  2465. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2466. param.Value = 0m;
  2467. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2468. param.Value = 3;
  2469. dr = cmd.ExecuteReader ();
  2470. Assert.IsTrue (dr.Read (), "#E1");
  2471. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  2472. Assert.AreEqual (3, dr.GetValue (0), "#E3");
  2473. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#E4");
  2474. Assert.AreEqual (0m, dr.GetValue (1), "#E5");
  2475. Assert.IsFalse (dr.Read (), "#E6");
  2476. dr.Close ();
  2477. cmd.Dispose ();
  2478. cmd = (OdbcCommand) conn.CreateCommand ();
  2479. cmd.CommandText = select_data1;
  2480. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2481. param.Value = DBNull.Value;
  2482. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2483. param.Value = 4;
  2484. dr = cmd.ExecuteReader ();
  2485. Assert.IsFalse (dr.Read (), "#F");
  2486. dr.Close ();
  2487. cmd.Dispose ();
  2488. cmd = (OdbcCommand) conn.CreateCommand ();
  2489. cmd.CommandText = select_by_id;
  2490. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2491. param.Value = 4;
  2492. dr = cmd.ExecuteReader ();
  2493. Assert.IsTrue (dr.Read (), "#G1");
  2494. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  2495. Assert.AreEqual (4, dr.GetValue (0), "#G3");
  2496. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#G4");
  2497. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#G5");
  2498. Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#G6");
  2499. Assert.AreEqual (DBNull.Value, dr.GetValue (2), "#G7");
  2500. Assert.IsFalse (dr.Read (), "#G8");
  2501. dr.Close ();
  2502. cmd.Dispose ();
  2503. cmd = (OdbcCommand) conn.CreateCommand ();
  2504. cmd.CommandText = insert_data;
  2505. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2506. param.Value = -1000.5678m;
  2507. param = cmd.Parameters.Add ("type_numeric2", OdbcType.Numeric);
  2508. param.Value = -1000.5678m;
  2509. cmd.ExecuteNonQuery ();
  2510. cmd.Dispose ();
  2511. cmd = (OdbcCommand) conn.CreateCommand ();
  2512. cmd.CommandText = select_data1;
  2513. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2514. param.Value = -1000.5678m;
  2515. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2516. param.Value = 6000;
  2517. dr = cmd.ExecuteReader ();
  2518. Assert.IsFalse (dr.Read (), "#H");
  2519. dr.Close ();
  2520. cmd.Dispose ();
  2521. cmd = (OdbcCommand) conn.CreateCommand ();
  2522. cmd.CommandText = select_data1;
  2523. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2524. param.Value = -1001;
  2525. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2526. param.Value = 6000;
  2527. dr = cmd.ExecuteReader ();
  2528. Assert.IsTrue (dr.Read (), "#I1");
  2529. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#I2");
  2530. Assert.AreEqual (6000, dr.GetValue (0), "#I3");
  2531. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#I4");
  2532. Assert.AreEqual (-1001m, dr.GetValue (1), "#I5");
  2533. Assert.IsFalse (dr.Read (), "#I6");
  2534. dr.Close ();
  2535. cmd.Dispose ();
  2536. cmd = (OdbcCommand) conn.CreateCommand ();
  2537. cmd.CommandText = select_data2;
  2538. param = cmd.Parameters.Add ("type_numeric2", OdbcType.Numeric);
  2539. param.Value = -1000.5678m;
  2540. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2541. param.Value = 6000;
  2542. dr = cmd.ExecuteReader ();
  2543. Assert.IsFalse (dr.Read (), "#J");
  2544. dr.Close ();
  2545. cmd.Dispose ();
  2546. cmd = (OdbcCommand) conn.CreateCommand ();
  2547. cmd.CommandText = select_data2;
  2548. param = cmd.Parameters.Add ("type_numeric2", OdbcType.Numeric);
  2549. param.Value = -1000.568m;
  2550. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2551. param.Value = 6000;
  2552. dr = cmd.ExecuteReader ();
  2553. Assert.IsTrue (dr.Read (), "#K1");
  2554. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#K2");
  2555. Assert.AreEqual (6000, dr.GetValue (0), "#K3");
  2556. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#K4");
  2557. Assert.AreEqual (-1000.568m, dr.GetValue (1), "#K5");
  2558. Assert.IsFalse (dr.Read (), "#K6");
  2559. dr.Close ();
  2560. cmd.Dispose ();
  2561. DBHelper.ExecuteNonQuery (conn, delete_data);
  2562. cmd = (OdbcCommand) conn.CreateCommand ();
  2563. cmd.CommandText = insert_data;
  2564. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2565. param.Value = 56789m;
  2566. param.Precision = 7;
  2567. param.Scale = 2;
  2568. param = cmd.Parameters.Add ("type_numeric2", OdbcType.Numeric);
  2569. param.Value = 98765.5678m;
  2570. param.Precision = 10;
  2571. param.Scale = 2;
  2572. cmd.ExecuteNonQuery ();
  2573. cmd.Dispose ();
  2574. cmd = (OdbcCommand) conn.CreateCommand ();
  2575. cmd.CommandText = select_by_id;
  2576. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2577. param.Value = 6000;
  2578. dr = cmd.ExecuteReader ();
  2579. Assert.IsTrue (dr.Read (), "#L1");
  2580. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#L2");
  2581. Assert.AreEqual (6000, dr.GetValue (0), "#L3");
  2582. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#L4");
  2583. Assert.AreEqual (56789m, dr.GetValue (1), "#L5");
  2584. Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#L6");
  2585. if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
  2586. Assert.AreEqual (9876556.780m, dr.GetValue (2), "#L7");
  2587. else
  2588. Assert.AreEqual (98765.570m, dr.GetValue (2), "#L7");
  2589. Assert.IsFalse (dr.Read (), "#L8");
  2590. dr.Close ();
  2591. cmd.Dispose ();
  2592. DBHelper.ExecuteNonQuery (conn, delete_data);
  2593. cmd = (OdbcCommand) conn.CreateCommand ();
  2594. cmd.CommandText = insert_data;
  2595. param = cmd.Parameters.Add ("type_numeric1", OdbcType.Numeric);
  2596. param.Value = DBNull.Value;
  2597. param = cmd.Parameters.Add ("type_numeric2", OdbcType.Numeric);
  2598. param.Value = DBNull.Value;
  2599. cmd.ExecuteNonQuery ();
  2600. cmd.Dispose ();
  2601. cmd = (OdbcCommand) conn.CreateCommand ();
  2602. cmd.CommandText = select_by_id;
  2603. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2604. param.Value = 6000;
  2605. dr = cmd.ExecuteReader ();
  2606. Assert.IsTrue (dr.Read (), "#M1");
  2607. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#M2");
  2608. Assert.AreEqual (6000, dr.GetValue (0), "#M3");
  2609. Assert.AreEqual (typeof (decimal), dr.GetFieldType (1), "#M4");
  2610. if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
  2611. Assert.AreEqual (0m, dr.GetValue (1), "#M5");
  2612. else
  2613. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#M5");
  2614. Assert.AreEqual (typeof (decimal), dr.GetFieldType (2), "#M6");
  2615. if (ConnectionManager.Singleton.Engine.Type == EngineType.MySQL)
  2616. Assert.AreEqual (0m, dr.GetValue (1), "#M7");
  2617. else
  2618. Assert.AreEqual (DBNull.Value, dr.GetValue (2), "#M7");
  2619. Assert.IsFalse (dr.Read (), "#M8");
  2620. dr.Close ();
  2621. cmd.Dispose ();
  2622. } finally {
  2623. if (cmd != null)
  2624. cmd.Dispose ();
  2625. if (dr != null)
  2626. dr.Close ();
  2627. conn.Close ();
  2628. conn.Open ();
  2629. DBHelper.ExecuteNonQuery (conn, delete_data);
  2630. conn.Close ();
  2631. }
  2632. }
  2633. [Test]
  2634. public void NVarCharParameterTest ()
  2635. {
  2636. string insert_data = "insert into string_family (id, type_nvarchar) values (6000, ?)";
  2637. string select_data = "select type_nvarchar from string_family where type_nvarchar = ? and id = ?";
  2638. string select_by_id = "select type_nvarchar from string_family where id = ?";
  2639. string delete_data = "delete from string_family where id = 6000";
  2640. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  2641. conn.Open ();
  2642. IDataReader dr = null;
  2643. OdbcCommand cmd = null;
  2644. OdbcParameter param;
  2645. try {
  2646. cmd = conn.CreateCommand ();
  2647. cmd.CommandText = select_data;
  2648. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar);
  2649. param.Value = "nv\u092d\u093e\u0930\u0924r";
  2650. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2651. param.Value = 1;
  2652. dr = cmd.ExecuteReader ();
  2653. Assert.IsTrue (dr.Read (), "#A1");
  2654. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#A2");
  2655. Assert.AreEqual ("nv\u092d\u093e\u0930\u0924r", dr.GetValue (0), "#A3");
  2656. Assert.IsFalse (dr.Read (), "#A4");
  2657. dr.Close ();
  2658. cmd.Dispose ();
  2659. cmd = conn.CreateCommand ();
  2660. cmd.CommandText = select_data;
  2661. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar);
  2662. param.Value = "nv\u092d\u093e\u0930\u0924r ";
  2663. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2664. param.Value = 2;
  2665. dr = cmd.ExecuteReader ();
  2666. Assert.IsTrue (dr.Read (), "#B1");
  2667. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#B2");
  2668. Assert.AreEqual ("nv\u092d\u093e\u0930\u0924r ", dr.GetValue (0), "#B3");
  2669. Assert.IsFalse (dr.Read (), "#B4");
  2670. dr.Close ();
  2671. cmd.Dispose ();
  2672. cmd = conn.CreateCommand ();
  2673. cmd.CommandText = select_data;
  2674. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar);
  2675. param.Value = string.Empty;
  2676. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2677. param.Value = 3;
  2678. dr = cmd.ExecuteReader ();
  2679. Assert.IsTrue (dr.Read (), "#C1");
  2680. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#C2");
  2681. Assert.AreEqual (string.Empty, dr.GetValue (0), "#C3");
  2682. Assert.IsFalse (dr.Read (), "#C4");
  2683. dr.Close ();
  2684. cmd.Dispose ();
  2685. cmd = conn.CreateCommand ();
  2686. cmd.CommandText = select_by_id;
  2687. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2688. param.Value = 4;
  2689. dr = cmd.ExecuteReader ();
  2690. Assert.IsTrue (dr.Read (), "#D1");
  2691. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#D2");
  2692. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#D3");
  2693. Assert.IsFalse (dr.Read (), "#D4");
  2694. dr.Close ();
  2695. cmd.Dispose ();
  2696. cmd = conn.CreateCommand ();
  2697. cmd.CommandText = insert_data;
  2698. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar);
  2699. param.Value = "nvarchar ";
  2700. cmd.ExecuteNonQuery ();
  2701. cmd.Dispose ();
  2702. cmd = conn.CreateCommand ();
  2703. cmd.CommandText = select_data;
  2704. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar);
  2705. param.Value = "nvarchar ";
  2706. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2707. param.Value = 6000;
  2708. dr = cmd.ExecuteReader ();
  2709. Assert.IsTrue (dr.Read (), "#E1");
  2710. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#E2");
  2711. Assert.AreEqual ("nvarchar ", dr.GetValue (0), "#E3");
  2712. Assert.IsFalse (dr.Read (), "#E4");
  2713. dr.Close ();
  2714. cmd.Dispose ();
  2715. DBHelper.ExecuteNonQuery (conn, delete_data);
  2716. cmd = conn.CreateCommand ();
  2717. cmd.CommandText = insert_data;
  2718. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar, 6);
  2719. param.Value = "nv\u0488rchar";
  2720. cmd.ExecuteNonQuery ();
  2721. cmd.Dispose ();
  2722. cmd = conn.CreateCommand ();
  2723. cmd.CommandText = select_data;
  2724. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar, 6);
  2725. param.Value = "nv\u0488rchar";
  2726. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2727. param.Value = 6000;
  2728. dr = cmd.ExecuteReader ();
  2729. Assert.IsTrue (dr.Read (), "#F1");
  2730. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#F2");
  2731. Assert.AreEqual ("nv\u0488rch", dr.GetValue (0), "#F3");
  2732. Assert.IsFalse (dr.Read (), "#F4");
  2733. dr.Close ();
  2734. cmd.Dispose ();
  2735. DBHelper.ExecuteNonQuery (conn, delete_data);
  2736. cmd = conn.CreateCommand ();
  2737. cmd.CommandText = insert_data;
  2738. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar, 12);
  2739. param.Value = "nvarch\u0488r ";
  2740. cmd.ExecuteNonQuery ();
  2741. cmd.Dispose ();
  2742. cmd = conn.CreateCommand ();
  2743. cmd.CommandText = select_data;
  2744. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar, 12);
  2745. param.Value = "nvarch\u0488r ";
  2746. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2747. param.Value = 6000;
  2748. dr = cmd.ExecuteReader ();
  2749. Assert.IsTrue (dr.Read (), "#G1");
  2750. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#G2");
  2751. Assert.AreEqual ("nvarch\u0488r ", dr.GetValue (0), "#G3");
  2752. Assert.IsFalse (dr.Read (), "#G4");
  2753. dr.Close ();
  2754. cmd.Dispose ();
  2755. DBHelper.ExecuteNonQuery (conn, delete_data);
  2756. cmd = conn.CreateCommand ();
  2757. cmd.CommandText = insert_data;
  2758. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar, 12);
  2759. param.Value = string.Empty;
  2760. cmd.ExecuteNonQuery ();
  2761. cmd.Dispose ();
  2762. cmd = conn.CreateCommand ();
  2763. cmd.CommandText = select_data;
  2764. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar, 12);
  2765. param.Value = string.Empty;
  2766. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2767. param.Value = 6000;
  2768. dr = cmd.ExecuteReader ();
  2769. Assert.IsTrue (dr.Read (), "#H1");
  2770. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#H2");
  2771. Assert.AreEqual (string.Empty, dr.GetValue (0), "#H3");
  2772. Assert.IsFalse (dr.Read (), "#H4");
  2773. dr.Close ();
  2774. cmd.Dispose ();
  2775. DBHelper.ExecuteNonQuery (conn, delete_data);
  2776. cmd = conn.CreateCommand ();
  2777. cmd.CommandText = insert_data;
  2778. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.NVarChar);
  2779. param.Value = DBNull.Value;
  2780. cmd.ExecuteNonQuery ();
  2781. cmd.Dispose ();
  2782. cmd = conn.CreateCommand ();
  2783. cmd.CommandText = select_by_id;
  2784. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2785. param.Value = 6000;
  2786. dr = cmd.ExecuteReader ();
  2787. Assert.IsTrue (dr.Read (), "#I1");
  2788. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#I2");
  2789. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#I3");
  2790. Assert.IsFalse (dr.Read (), "#I4");
  2791. dr.Close ();
  2792. cmd.Dispose ();
  2793. } finally {
  2794. if (cmd != null)
  2795. cmd.Dispose ();
  2796. if (dr != null)
  2797. dr.Close ();
  2798. conn.Close ();
  2799. conn.Open ();
  2800. DBHelper.ExecuteNonQuery (conn, delete_data);
  2801. conn.Close ();
  2802. }
  2803. }
  2804. [Test]
  2805. public void VarBinaryParameterTest ()
  2806. {
  2807. string insert_data = "insert into binary_family (id, type_varbinary) values (6000, ?)";
  2808. string select_data = "select id, type_varbinary from binary_family where type_varbinary = ? and id = ?";
  2809. string select_by_id = "select id, type_varbinary from binary_family where id = ?";
  2810. string delete_data = "delete from binary_family where id = 6000";
  2811. IDbConnection conn = ConnectionManager.Singleton.Connection;
  2812. conn.Open ();
  2813. IDataReader dr = null;
  2814. OdbcCommand cmd = null;
  2815. OdbcParameter param;
  2816. try {
  2817. byte [] bytes = new byte [] { 0x30, 0x31, 0x32,
  2818. 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
  2819. 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
  2820. 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33,
  2821. 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x00,
  2822. 0x44, 0x53};
  2823. cmd = (OdbcCommand) conn.CreateCommand ();
  2824. cmd.CommandText = select_data;
  2825. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2826. param.Value = bytes;
  2827. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2828. param.Value = 1;
  2829. dr = cmd.ExecuteReader ();
  2830. Assert.IsTrue (dr.Read (), "#A1");
  2831. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  2832. Assert.AreEqual (1, dr.GetValue (0), "#A3");
  2833. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#A4");
  2834. Assert.AreEqual (bytes, dr.GetValue (1), "#A5");
  2835. Assert.IsFalse (dr.Read (), "#A6");
  2836. dr.Close ();
  2837. cmd.Dispose ();
  2838. bytes = new byte [] { 0x00, 0x39, 0x38, 0x37,
  2839. 0x36, 0x35, 0x00, 0x33, 0x32, 0x31, 0x30,
  2840. 0x31, 0x32, 0x33, 0x34 };
  2841. cmd = (OdbcCommand) conn.CreateCommand ();
  2842. cmd.CommandText = select_data;
  2843. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2844. param.Value = bytes;
  2845. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2846. param.Value = 2;
  2847. dr = cmd.ExecuteReader ();
  2848. Assert.IsTrue (dr.Read (), "#B1");
  2849. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  2850. Assert.AreEqual (2, dr.GetValue (0), "#B3");
  2851. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#B4");
  2852. Assert.AreEqual (bytes, dr.GetValue (1), "#B5");
  2853. Assert.IsFalse (dr.Read (), "#B6");
  2854. dr.Close ();
  2855. cmd.Dispose ();
  2856. bytes = new byte [0];
  2857. cmd = (OdbcCommand) conn.CreateCommand ();
  2858. cmd.CommandText = select_data;
  2859. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2860. param.Value = bytes;
  2861. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2862. param.Value = 3;
  2863. dr = cmd.ExecuteReader ();
  2864. Assert.IsTrue (dr.Read (), "#C1");
  2865. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  2866. Assert.AreEqual (3, dr.GetValue (0), "#C3");
  2867. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#C4");
  2868. Assert.AreEqual (bytes, dr.GetValue (1), "#C5");
  2869. Assert.IsFalse (dr.Read (), "#C6");
  2870. dr.Close ();
  2871. cmd.Dispose ();
  2872. cmd = (OdbcCommand) conn.CreateCommand ();
  2873. cmd.CommandText = select_by_id;
  2874. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2875. param.Value = 4;
  2876. dr = cmd.ExecuteReader ();
  2877. Assert.IsTrue (dr.Read (), "#D1");
  2878. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  2879. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  2880. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#D4");
  2881. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  2882. Assert.IsFalse (dr.Read (), "#D6");
  2883. dr.Close ();
  2884. cmd.Dispose ();
  2885. bytes = new byte [0];
  2886. cmd = (OdbcCommand) conn.CreateCommand ();
  2887. cmd.CommandText = insert_data;
  2888. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2889. param.Value = bytes;
  2890. cmd.ExecuteNonQuery ();
  2891. cmd.Dispose ();
  2892. cmd = (OdbcCommand) conn.CreateCommand ();
  2893. cmd.CommandText = select_data;
  2894. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2895. param.Value = bytes;
  2896. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2897. param.Value = 6000;
  2898. dr = cmd.ExecuteReader ();
  2899. Assert.IsTrue (dr.Read (), "#E1");
  2900. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  2901. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  2902. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#E4");
  2903. Assert.AreEqual (bytes, dr.GetValue (1), "#E5");
  2904. Assert.IsFalse (dr.Read (), "#E6");
  2905. dr.Close ();
  2906. cmd.Dispose ();
  2907. DBHelper.ExecuteNonQuery (conn, delete_data);
  2908. bytes = new byte [] { 0x05 };
  2909. cmd = (OdbcCommand) conn.CreateCommand ();
  2910. cmd.CommandText = insert_data;
  2911. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2912. param.Value = bytes;
  2913. cmd.ExecuteNonQuery ();
  2914. cmd.Dispose ();
  2915. cmd = (OdbcCommand) conn.CreateCommand ();
  2916. cmd.CommandText = select_data;
  2917. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2918. param.Value = bytes;
  2919. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2920. param.Value = 6000;
  2921. dr = cmd.ExecuteReader ();
  2922. Assert.IsTrue (dr.Read (), "#F1");
  2923. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  2924. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  2925. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#F4");
  2926. Assert.AreEqual (bytes, dr.GetValue (1), "#F5");
  2927. Assert.IsFalse (dr.Read (), "#F6");
  2928. dr.Close ();
  2929. cmd.Dispose ();
  2930. DBHelper.ExecuteNonQuery (conn, delete_data);
  2931. bytes = new byte [] { 0x34, 0x00, 0x32 };
  2932. cmd = (OdbcCommand) conn.CreateCommand ();
  2933. cmd.CommandText = insert_data;
  2934. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2935. param.Value = bytes;
  2936. cmd.ExecuteNonQuery ();
  2937. cmd.Dispose ();
  2938. cmd = (OdbcCommand) conn.CreateCommand ();
  2939. cmd.CommandText = select_data;
  2940. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2941. param.Value = bytes;
  2942. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2943. param.Value = 6000;
  2944. dr = cmd.ExecuteReader ();
  2945. Assert.IsTrue (dr.Read (), "#G1");
  2946. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  2947. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  2948. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#G4");
  2949. Assert.AreEqual (bytes, dr.GetValue (1), "#G5");
  2950. Assert.IsFalse (dr.Read (), "#G6");
  2951. dr.Close ();
  2952. cmd.Dispose ();
  2953. DBHelper.ExecuteNonQuery (conn, delete_data);
  2954. bytes = new byte [] { 0x34, 0x00, 0x32, 0x05, 0x07, 0x13 };
  2955. cmd = (OdbcCommand) conn.CreateCommand ();
  2956. cmd.CommandText = insert_data;
  2957. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary, 4);
  2958. param.Value = bytes;
  2959. cmd.ExecuteNonQuery ();
  2960. cmd.Dispose ();
  2961. cmd = (OdbcCommand) conn.CreateCommand ();
  2962. cmd.CommandText = select_data;
  2963. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary, 4);
  2964. param.Value = bytes;
  2965. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2966. param.Value = 6000;
  2967. dr = cmd.ExecuteReader ();
  2968. Assert.IsTrue (dr.Read (), "#H1");
  2969. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  2970. Assert.AreEqual (6000, dr.GetValue (0), "#H3");
  2971. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#H4");
  2972. Assert.AreEqual (new byte [] { 0x34, 0x00, 0x32, 0x05 }, dr.GetValue (1), "#H5");
  2973. Assert.IsFalse (dr.Read (), "#H6");
  2974. dr.Close ();
  2975. cmd.Dispose ();
  2976. DBHelper.ExecuteNonQuery (conn, delete_data);
  2977. cmd = (OdbcCommand) conn.CreateCommand ();
  2978. cmd.CommandText = insert_data;
  2979. param = cmd.Parameters.Add ("type_varbinary", OdbcType.VarBinary);
  2980. param.Value = DBNull.Value;
  2981. cmd.ExecuteNonQuery ();
  2982. cmd.Dispose ();
  2983. cmd = (OdbcCommand) conn.CreateCommand ();
  2984. cmd.CommandText = select_by_id;
  2985. param = cmd.Parameters.Add ("id", OdbcType.Int);
  2986. param.Value = 6000;
  2987. dr = cmd.ExecuteReader ();
  2988. Assert.IsTrue (dr.Read (), "#I1");
  2989. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#I2");
  2990. Assert.AreEqual (6000, dr.GetValue (0), "#I3");
  2991. Assert.AreEqual (typeof (byte []), dr.GetFieldType (1), "#I4");
  2992. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#I5");
  2993. Assert.IsFalse (dr.Read (), "#I6");
  2994. dr.Close ();
  2995. cmd.Dispose ();
  2996. } finally {
  2997. if (dr != null)
  2998. dr.Close ();
  2999. if (cmd != null)
  3000. cmd.Dispose ();
  3001. conn.Close ();
  3002. conn.Open ();
  3003. DBHelper.ExecuteNonQuery (conn, delete_data);
  3004. conn.Close ();
  3005. }
  3006. }
  3007. [Test]
  3008. public void VarCharParameterTest ()
  3009. {
  3010. string insert_data = "insert into string_family (id, type_varchar) values (6000, ?)";
  3011. string select_data = "select type_varchar from string_family where type_varchar = ? and id = ?";
  3012. string select_by_id = "select type_varchar from string_family where id = ?";
  3013. string delete_data = "delete from string_family where id = 6000";
  3014. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  3015. conn.Open ();
  3016. IDataReader dr = null;
  3017. OdbcCommand cmd = null;
  3018. OdbcParameter param;
  3019. try {
  3020. cmd = conn.CreateCommand ();
  3021. cmd.CommandText = select_data;
  3022. param = cmd.Parameters.Add ("type_varchar", OdbcType.VarChar);
  3023. param.Value = "varchar";
  3024. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3025. param.Value = 1;
  3026. dr = cmd.ExecuteReader ();
  3027. Assert.IsTrue (dr.Read (), "#A1");
  3028. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#A2");
  3029. Assert.AreEqual ("varchar", dr.GetValue (0), "#A3");
  3030. Assert.IsFalse (dr.Read (), "#A4");
  3031. dr.Close ();
  3032. cmd.Dispose ();
  3033. cmd = conn.CreateCommand ();
  3034. cmd.CommandText = select_data;
  3035. param = cmd.Parameters.Add ("type_varchar", OdbcType.VarChar);
  3036. param.Value = "varchar ";
  3037. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3038. param.Value = 2;
  3039. dr = cmd.ExecuteReader ();
  3040. Assert.IsTrue (dr.Read (), "#B1");
  3041. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#B2");
  3042. Assert.AreEqual ("varchar ", dr.GetValue (0), "#B3");
  3043. Assert.IsFalse (dr.Read (), "#B4");
  3044. dr.Close ();
  3045. cmd.Dispose ();
  3046. cmd = conn.CreateCommand ();
  3047. cmd.CommandText = select_data;
  3048. param = cmd.Parameters.Add ("type_varchar", OdbcType.VarChar);
  3049. param.Value = string.Empty;
  3050. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3051. param.Value = 3;
  3052. dr = cmd.ExecuteReader ();
  3053. Assert.IsTrue (dr.Read (), "#C1");
  3054. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#C2");
  3055. Assert.AreEqual (string.Empty, dr.GetValue (0), "#C3");
  3056. Assert.IsFalse (dr.Read (), "#C4");
  3057. dr.Close ();
  3058. cmd.Dispose ();
  3059. cmd = conn.CreateCommand ();
  3060. cmd.CommandText = select_by_id;
  3061. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3062. param.Value = 4;
  3063. dr = cmd.ExecuteReader ();
  3064. Assert.IsTrue (dr.Read (), "#D1");
  3065. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#D2");
  3066. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#D3");
  3067. Assert.IsFalse (dr.Read (), "#D4");
  3068. dr.Close ();
  3069. cmd.Dispose ();
  3070. cmd = conn.CreateCommand ();
  3071. cmd.CommandText = insert_data;
  3072. param = cmd.Parameters.Add ("type_varchar", OdbcType.VarChar, 30);
  3073. param.Value = "varchar ";
  3074. cmd.ExecuteNonQuery ();
  3075. cmd.Dispose ();
  3076. cmd = conn.CreateCommand ();
  3077. cmd.CommandText = select_data;
  3078. param = cmd.Parameters.Add ("type_varchar", OdbcType.VarChar);
  3079. param.Value = "varchar ";
  3080. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3081. param.Value = 6000;
  3082. dr = cmd.ExecuteReader ();
  3083. Assert.IsTrue (dr.Read (), "#E1");
  3084. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#E2");
  3085. Assert.AreEqual ("varchar ", dr.GetValue (0), "#E3");
  3086. Assert.IsFalse (dr.Read (), "#E4");
  3087. dr.Close ();
  3088. cmd.Dispose ();
  3089. DBHelper.ExecuteNonQuery (conn, delete_data);
  3090. cmd = conn.CreateCommand ();
  3091. cmd.CommandText = insert_data;
  3092. param = cmd.Parameters.Add ("type_varchar", OdbcType.VarChar, 3);
  3093. param.Value = "vchar";
  3094. cmd.ExecuteNonQuery ();
  3095. cmd.Dispose ();
  3096. cmd = conn.CreateCommand ();
  3097. cmd.CommandText = select_data;
  3098. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.VarChar, 3);
  3099. param.Value = "vcharxzer";
  3100. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3101. param.Value = 6000;
  3102. dr = cmd.ExecuteReader ();
  3103. Assert.IsTrue (dr.Read (), "#F1");
  3104. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#F2");
  3105. Assert.AreEqual ("vch", dr.GetValue (0), "#F3");
  3106. Assert.IsFalse (dr.Read (), "#F4");
  3107. dr.Close ();
  3108. cmd.Dispose ();
  3109. DBHelper.ExecuteNonQuery (conn, delete_data);
  3110. cmd = conn.CreateCommand ();
  3111. cmd.CommandText = insert_data;
  3112. param = cmd.Parameters.Add ("type_varchar", OdbcType.VarChar, 3);
  3113. param.Value = string.Empty;
  3114. cmd.ExecuteNonQuery ();
  3115. cmd.Dispose ();
  3116. cmd = conn.CreateCommand ();
  3117. cmd.CommandText = select_data;
  3118. param = cmd.Parameters.Add ("type_nvarchar", OdbcType.VarChar, 3);
  3119. param.Value = string.Empty;
  3120. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3121. param.Value = 6000;
  3122. dr = cmd.ExecuteReader ();
  3123. Assert.IsTrue (dr.Read (), "#G1");
  3124. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#G2");
  3125. Assert.AreEqual (string.Empty, dr.GetValue (0), "#G3");
  3126. Assert.IsFalse (dr.Read (), "#G4");
  3127. dr.Close ();
  3128. cmd.Dispose ();
  3129. DBHelper.ExecuteNonQuery (conn, delete_data);
  3130. cmd = conn.CreateCommand ();
  3131. cmd.CommandText = insert_data;
  3132. param = cmd.Parameters.Add ("type_varchar", OdbcType.VarChar, 5);
  3133. param.Value = DBNull.Value;
  3134. cmd.ExecuteNonQuery ();
  3135. cmd.Dispose ();
  3136. cmd = conn.CreateCommand ();
  3137. cmd.CommandText = select_by_id;
  3138. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3139. param.Value = 6000;
  3140. dr = cmd.ExecuteReader ();
  3141. Assert.IsTrue (dr.Read (), "#H1");
  3142. Assert.AreEqual (typeof (string), dr.GetFieldType (0), "#H2");
  3143. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#H3");
  3144. Assert.IsFalse (dr.Read (), "#H4");
  3145. dr.Close ();
  3146. cmd.Dispose ();
  3147. } finally {
  3148. if (cmd != null)
  3149. cmd.Dispose ();
  3150. if (dr != null)
  3151. dr.Close ();
  3152. conn.Close ();
  3153. conn.Open ();
  3154. DBHelper.ExecuteNonQuery (conn, delete_data);
  3155. conn.Close ();
  3156. }
  3157. }
  3158. [Test]
  3159. public void RealParameterTest ()
  3160. {
  3161. string insert_data = "insert into numeric_family (id, type_float) values (6000, ?)";
  3162. string select_data = "select id, type_float from numeric_family where type_float = ? and id = ?";
  3163. string select_by_id = "select id, type_float from numeric_family where id = ?";
  3164. string delete_data = "delete from numeric_family where id = 6000";
  3165. IDbConnection conn = ConnectionManager.Singleton.Connection;
  3166. conn.Open ();
  3167. IDataReader dr = null;
  3168. OdbcCommand cmd = null;
  3169. OdbcParameter param;
  3170. try {
  3171. cmd = (OdbcCommand) conn.CreateCommand ();
  3172. cmd.CommandText = select_by_id;
  3173. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3174. param.Value = 1;
  3175. dr = cmd.ExecuteReader ();
  3176. Assert.IsTrue (dr.Read (), "#D1");
  3177. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  3178. Assert.AreEqual (1, dr.GetValue (0), "#D3");
  3179. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#D4");
  3180. Assert.AreEqual (3.40E+38, dr.GetValue (1), "#D5");
  3181. Assert.IsFalse (dr.Read (), "#D6");
  3182. dr.Close ();
  3183. cmd.Dispose ();
  3184. cmd = (OdbcCommand) conn.CreateCommand ();
  3185. cmd.CommandText = select_data;
  3186. param = cmd.Parameters.Add ("type_float", OdbcType.Real);
  3187. param.Value = 3.40E+38;
  3188. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3189. param.Value = 1;
  3190. dr = cmd.ExecuteReader ();
  3191. Assert.IsTrue (dr.Read (), "#A1");
  3192. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  3193. Assert.AreEqual (1, dr.GetValue (0), "#A2");
  3194. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#A3");
  3195. Assert.AreEqual (3.40E+38, dr.GetValue (1), "#A4");
  3196. Assert.IsFalse (dr.Read (), "#A5");
  3197. dr.Close ();
  3198. cmd.Dispose ();
  3199. cmd = (OdbcCommand) conn.CreateCommand ();
  3200. cmd.CommandText = select_data;
  3201. param = cmd.Parameters.Add ("type_float", OdbcType.Real);
  3202. param.Value = -3.40E+38;
  3203. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3204. param.Value = 2;
  3205. dr = cmd.ExecuteReader ();
  3206. Assert.IsTrue (dr.Read (), "#B1");
  3207. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  3208. Assert.AreEqual (2, dr.GetValue (0), "#B2");
  3209. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#B3");
  3210. Assert.AreEqual (-3.40E+38, dr.GetValue (1), "#B4");
  3211. Assert.IsFalse (dr.Read (), "#B5");
  3212. dr.Close ();
  3213. cmd.Dispose ();
  3214. cmd = (OdbcCommand) conn.CreateCommand ();
  3215. cmd.CommandText = select_data;
  3216. param = cmd.Parameters.Add ("type_float", OdbcType.Real);
  3217. param.Value = 0F;
  3218. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3219. param.Value = 3;
  3220. dr = cmd.ExecuteReader ();
  3221. Assert.IsTrue (dr.Read (), "#C1");
  3222. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  3223. Assert.AreEqual (3, dr.GetValue (0), "#C2");
  3224. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#C3");
  3225. Assert.AreEqual (0F, dr.GetValue (1), "#C4");
  3226. Assert.IsFalse (dr.Read (), "#C5");
  3227. dr.Close ();
  3228. cmd.Dispose ();
  3229. cmd = (OdbcCommand) conn.CreateCommand ();
  3230. cmd.CommandText = select_by_id;
  3231. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3232. param.Value = 4;
  3233. dr = cmd.ExecuteReader ();
  3234. Assert.IsTrue (dr.Read (), "#D1");
  3235. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  3236. Assert.AreEqual (4, dr.GetValue (0), "#D3");
  3237. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#D4");
  3238. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  3239. Assert.IsFalse (dr.Read (), "#D6");
  3240. dr.Close ();
  3241. cmd.Dispose ();
  3242. cmd = (OdbcCommand) conn.CreateCommand ();
  3243. cmd.CommandText = insert_data;
  3244. param = cmd.Parameters.Add ("type_float", OdbcType.Real);
  3245. param.Value = 3.40E+38;
  3246. cmd.ExecuteNonQuery ();
  3247. cmd.Dispose ();
  3248. cmd = (OdbcCommand) conn.CreateCommand ();
  3249. cmd.CommandText = select_by_id;
  3250. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3251. param.Value = 6000;
  3252. dr = cmd.ExecuteReader ();
  3253. Assert.IsTrue (dr.Read (), "#E1");
  3254. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#E2");
  3255. Assert.AreEqual (6000, dr.GetValue (0), "#E3");
  3256. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#E4");
  3257. Assert.AreEqual (3.40E+38, dr.GetValue (1), "#E5");
  3258. Assert.IsFalse (dr.Read (), "#E6");
  3259. dr.Close ();
  3260. cmd.Dispose ();
  3261. DBHelper.ExecuteNonQuery (conn, delete_data);
  3262. cmd = (OdbcCommand) conn.CreateCommand ();
  3263. cmd.CommandText = insert_data;
  3264. param = cmd.Parameters.Add ("type_float", OdbcType.Real);
  3265. param.Value = -3.40E+38;
  3266. cmd.ExecuteNonQuery ();
  3267. cmd.Dispose ();
  3268. cmd = (OdbcCommand) conn.CreateCommand ();
  3269. cmd.CommandText = select_by_id;
  3270. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3271. param.Value = 6000;
  3272. dr = cmd.ExecuteReader ();
  3273. Assert.IsTrue (dr.Read (), "#F1");
  3274. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#F2");
  3275. Assert.AreEqual (6000, dr.GetValue (0), "#F3");
  3276. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#F4");
  3277. Assert.AreEqual (-3.40E+38, dr.GetValue (1), "#F5");
  3278. Assert.IsFalse (dr.Read (), "#F6");
  3279. dr.Close ();
  3280. cmd.Dispose ();
  3281. DBHelper.ExecuteNonQuery (conn, delete_data);
  3282. cmd = (OdbcCommand) conn.CreateCommand ();
  3283. cmd.CommandText = insert_data;
  3284. param = cmd.Parameters.Add ("type_float", OdbcType.Real);
  3285. param.Value = 0F;
  3286. cmd.ExecuteNonQuery ();
  3287. cmd.Dispose ();
  3288. cmd = (OdbcCommand) conn.CreateCommand ();
  3289. cmd.CommandText = select_by_id;
  3290. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3291. param.Value = 6000;
  3292. dr = cmd.ExecuteReader ();
  3293. Assert.IsTrue (dr.Read (), "#G1");
  3294. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#G2");
  3295. Assert.AreEqual (6000, dr.GetValue (0), "#G3");
  3296. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#G4");
  3297. Assert.AreEqual (0F, dr.GetValue (1), "#G5");
  3298. Assert.IsFalse (dr.Read (), "#G6");
  3299. dr.Close ();
  3300. cmd.Dispose ();
  3301. DBHelper.ExecuteNonQuery (conn, delete_data);
  3302. cmd = (OdbcCommand) conn.CreateCommand ();
  3303. cmd.CommandText = insert_data;
  3304. param = cmd.Parameters.Add ("type_float", OdbcType.Real);
  3305. param.Value = DBNull.Value;
  3306. cmd.ExecuteNonQuery ();
  3307. cmd.Dispose ();
  3308. cmd = (OdbcCommand) conn.CreateCommand ();
  3309. cmd.CommandText = select_by_id;
  3310. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3311. param.Value = 6000;
  3312. dr = cmd.ExecuteReader ();
  3313. Assert.IsTrue (dr.Read (), "#H1");
  3314. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#H2");
  3315. Assert.AreEqual (6000, dr.GetValue (0), "#H3");
  3316. Assert.AreEqual (typeof (float), dr.GetFieldType (1), "#H4");
  3317. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#H5");
  3318. Assert.IsFalse (dr.Read (), "#H6");
  3319. dr.Close ();
  3320. cmd.Dispose ();
  3321. } finally {
  3322. if (dr != null)
  3323. dr.Close ();
  3324. if (cmd != null)
  3325. cmd.Dispose ();
  3326. conn.Close ();
  3327. conn.Open ();
  3328. DBHelper.ExecuteNonQuery (conn, delete_data);
  3329. conn.Close ();
  3330. }
  3331. }
  3332. [Test]
  3333. public void SmallDateTimeParameterTest ()
  3334. {
  3335. string insert_data = "insert into datetime_family (id, type_smalldatetime) values (6000, ?)";
  3336. string select_data = "select id, type_smalldatetime from datetime_family where type_smalldatetime = ? and id = ?";
  3337. string select_by_id = "select id, type_smalldatetime from datetime_family where id = ?";
  3338. string delete_data = "delete from datetime_family where id = 6000";
  3339. IDbConnection conn = ConnectionManager.Singleton.Connection;
  3340. conn.Open ();
  3341. IDataReader dr = null;
  3342. OdbcCommand cmd = null;
  3343. OdbcParameter param;
  3344. try {
  3345. DateTime date = DateTime.Parse ("2037-12-31 23:59:00");
  3346. cmd = (OdbcCommand) conn.CreateCommand ();
  3347. cmd.CommandText = select_data;
  3348. param = cmd.Parameters.Add ("type_smalldatetime", OdbcType.SmallDateTime);
  3349. param.Value = date;
  3350. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3351. param.Value = 1;
  3352. dr = cmd.ExecuteReader ();
  3353. Assert.IsTrue (dr.Read (), "#A1");
  3354. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  3355. Assert.AreEqual (1, dr.GetValue (0), "#A3");
  3356. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#A4");
  3357. Assert.AreEqual (date, dr.GetValue (1), "#A5");
  3358. Assert.IsFalse (dr.Read (), "#A6");
  3359. dr.Close ();
  3360. cmd.Dispose ();
  3361. cmd = (OdbcCommand) conn.CreateCommand ();
  3362. cmd.CommandText = select_by_id;
  3363. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3364. param.Value = 4;
  3365. dr = cmd.ExecuteReader ();
  3366. Assert.IsTrue (dr.Read (), "#B1");
  3367. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  3368. Assert.AreEqual (4, dr.GetValue (0), "#B3");
  3369. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#B4");
  3370. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#B5");
  3371. Assert.IsFalse (dr.Read (), "#B6");
  3372. dr.Close ();
  3373. cmd.Dispose ();
  3374. date = new DateTime (1973, 8, 13, 17, 55, 00);
  3375. cmd = (OdbcCommand) conn.CreateCommand ();
  3376. cmd.CommandText = insert_data;
  3377. param = cmd.Parameters.Add ("type_smalldatetime", OdbcType.SmallDateTime);
  3378. param.Value = date;
  3379. cmd.ExecuteNonQuery ();
  3380. cmd.Dispose ();
  3381. cmd = (OdbcCommand) conn.CreateCommand ();
  3382. cmd.CommandText = select_data;
  3383. param = cmd.Parameters.Add ("type_smalldatetime", OdbcType.SmallDateTime);
  3384. param.Value = date;
  3385. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3386. param.Value = 6000;
  3387. dr = cmd.ExecuteReader ();
  3388. Assert.IsTrue (dr.Read (), "#C1");
  3389. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  3390. Assert.AreEqual (6000, dr.GetValue (0), "#C3");
  3391. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#C4");
  3392. Assert.AreEqual (date, dr.GetValue (1), "#C5");
  3393. Assert.IsFalse (dr.Read (), "#C6");
  3394. dr.Close ();
  3395. cmd.Dispose ();
  3396. DBHelper.ExecuteNonQuery (conn, delete_data);
  3397. cmd = (OdbcCommand) conn.CreateCommand ();
  3398. cmd.CommandText = insert_data;
  3399. param = cmd.Parameters.Add ("type_smalldatetime", OdbcType.SmallDateTime);
  3400. param.Value = DBNull.Value;
  3401. cmd.ExecuteNonQuery ();
  3402. cmd.Dispose ();
  3403. cmd = (OdbcCommand) conn.CreateCommand ();
  3404. cmd.CommandText = select_by_id;
  3405. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3406. param.Value = 6000;
  3407. dr = cmd.ExecuteReader ();
  3408. Assert.IsTrue (dr.Read (), "#D1");
  3409. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  3410. Assert.AreEqual (6000, dr.GetValue (0), "#D3");
  3411. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#D4");
  3412. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  3413. Assert.IsFalse (dr.Read (), "#D6");
  3414. dr.Close ();
  3415. cmd.Dispose ();
  3416. } finally {
  3417. if (dr != null)
  3418. dr.Close ();
  3419. if (cmd != null)
  3420. cmd.Dispose ();
  3421. conn.Close ();
  3422. conn.Open ();
  3423. DBHelper.ExecuteNonQuery (conn, delete_data);
  3424. conn.Close ();
  3425. }
  3426. }
  3427. [Test]
  3428. public void DateTimeParameterTest ()
  3429. {
  3430. string insert_data = "insert into datetime_family (id, type_datetime) values (6000, ?)";
  3431. string select_data = "select id, type_datetime from datetime_family where type_datetime = ? and id = ?";
  3432. string select_by_id = "select id, type_datetime from datetime_family where id = ?";
  3433. string delete_data = "delete from datetime_family where id = 6000";
  3434. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  3435. conn.Open ();
  3436. IDataReader dr = null;
  3437. OdbcCommand cmd = null;
  3438. OdbcParameter param;
  3439. try {
  3440. DateTime date = DateTime.ParseExact ("9999-12-31 23:59:59.997",
  3441. "yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
  3442. cmd = conn.CreateCommand ();
  3443. cmd.CommandText = select_data;
  3444. param = cmd.Parameters.Add ("type_datetime", OdbcType.DateTime);
  3445. param.Value = date;
  3446. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3447. param.Value = 1;
  3448. dr = cmd.ExecuteReader ();
  3449. Assert.IsTrue (dr.Read (), "#A1");
  3450. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#A2");
  3451. Assert.AreEqual (1, dr [0], "#A3");
  3452. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#A4");
  3453. if (ConnectionManager.Singleton.Engine.SupportsMicroseconds)
  3454. Assert.AreEqual (date, dr [1], "#A5");
  3455. else
  3456. Assert.AreEqual (new DateTime (9999, 12, 31, 23, 59, 59), dr [1], "#A5");
  3457. Assert.IsFalse (dr.Read (), "#A6");
  3458. dr.Close ();
  3459. cmd.Dispose ();
  3460. cmd = conn.CreateCommand ();
  3461. cmd.CommandText = select_by_id;
  3462. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3463. param.Value = 4;
  3464. dr = cmd.ExecuteReader ();
  3465. Assert.IsTrue (dr.Read (), "#B1");
  3466. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#B2");
  3467. Assert.AreEqual (4, dr.GetValue (0), "#B3");
  3468. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#B4");
  3469. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#B5");
  3470. Assert.IsFalse (dr.Read (), "#B6");
  3471. dr.Close ();
  3472. cmd.Dispose ();
  3473. date = new DateTime (1973, 8, 13, 17, 54, 33, 953);
  3474. cmd = conn.CreateCommand ();
  3475. cmd.CommandText = insert_data;
  3476. param = cmd.Parameters.Add ("type_datetime", OdbcType.DateTime);
  3477. param.Value = date;
  3478. cmd.ExecuteNonQuery ();
  3479. cmd.Dispose ();
  3480. cmd = conn.CreateCommand ();
  3481. cmd.CommandText = select_data;
  3482. param = cmd.Parameters.Add ("type_datetime", OdbcType.DateTime);
  3483. param.Value = date;
  3484. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3485. param.Value = 6000;
  3486. dr = cmd.ExecuteReader ();
  3487. Assert.IsTrue (dr.Read (), "#C1");
  3488. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#C2");
  3489. Assert.AreEqual (6000, dr.GetValue (0), "#C3");
  3490. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#C4");
  3491. if (ConnectionManager.Singleton.Engine.SupportsMicroseconds)
  3492. Assert.AreEqual (date, dr.GetValue (1), "#C5");
  3493. else
  3494. Assert.AreEqual (new DateTime (1973, 8, 13, 17, 54, 33), dr.GetValue (1), "#C5");
  3495. Assert.IsFalse (dr.Read (), "#C6");
  3496. dr.Close ();
  3497. cmd.Dispose ();
  3498. DBHelper.ExecuteNonQuery (conn, delete_data);
  3499. cmd = conn.CreateCommand ();
  3500. cmd.CommandText = insert_data;
  3501. param = cmd.Parameters.Add ("type_datetime", OdbcType.DateTime);
  3502. param.Value = DBNull.Value;
  3503. cmd.ExecuteNonQuery ();
  3504. cmd.Dispose ();
  3505. cmd = conn.CreateCommand ();
  3506. cmd.CommandText = select_by_id;
  3507. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3508. param.Value = 6000;
  3509. dr = cmd.ExecuteReader ();
  3510. Assert.IsTrue (dr.Read (), "#D1");
  3511. Assert.AreEqual (typeof (int), dr.GetFieldType (0), "#D2");
  3512. Assert.AreEqual (6000, dr.GetValue (0), "#D3");
  3513. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (1), "#D4");
  3514. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D5");
  3515. Assert.IsFalse (dr.Read (), "#D6");
  3516. dr.Close ();
  3517. cmd.Dispose ();
  3518. } finally {
  3519. if (dr != null)
  3520. dr.Close ();
  3521. if (cmd != null)
  3522. cmd.Dispose ();
  3523. conn.Close ();
  3524. conn.Open ();
  3525. DBHelper.ExecuteNonQuery (conn, delete_data);
  3526. conn.Close ();
  3527. }
  3528. }
  3529. [Test]
  3530. public void DateParameterTest ()
  3531. {
  3532. string insert_data = "insert into datetime_family (id, type_date) values (6000, ?)";
  3533. string select_data = "select type_date from datetime_family where type_date = ? and id = 1";
  3534. string select_by_id = "select type_date from datetime_family where id = ?";
  3535. string delete_data = "delete from datetime_family where id = 6000";
  3536. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  3537. conn.Open ();
  3538. IDataReader dr = null;
  3539. OdbcCommand cmd = null;
  3540. OdbcParameter param;
  3541. try {
  3542. if (!ConnectionManager.Singleton.Engine.SupportsDate)
  3543. Assert.Ignore ("Date test does not apply to the current driver (" + conn.Driver + ").");
  3544. DateTime date = new DateTime (9999, 12, 31);
  3545. cmd = conn.CreateCommand ();
  3546. cmd.CommandText = select_data;
  3547. param = cmd.Parameters.Add ("type_date", OdbcType.DateTime);
  3548. param.Value = date;
  3549. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3550. param.Value = 1;
  3551. dr = cmd.ExecuteReader ();
  3552. Assert.IsTrue (dr.Read (), "#A1");
  3553. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (0), "#A2");
  3554. Assert.AreEqual (date, dr.GetValue (0), "#A3");
  3555. Assert.IsFalse (dr.Read (), "#A4");
  3556. dr.Close ();
  3557. cmd.Dispose ();
  3558. cmd = conn.CreateCommand ();
  3559. cmd.CommandText = select_by_id;
  3560. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3561. param.Value = 4;
  3562. dr = cmd.ExecuteReader ();
  3563. Assert.IsTrue (dr.Read (), "#B1");
  3564. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (0), "#B2");
  3565. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#B3");
  3566. Assert.IsFalse (dr.Read (), "#B4");
  3567. dr.Close ();
  3568. cmd.Dispose ();
  3569. date = new DateTime (2004, 2, 21, 4, 50, 7);
  3570. cmd = conn.CreateCommand ();
  3571. cmd.CommandText = insert_data;
  3572. param = cmd.Parameters.Add ("type_date", OdbcType.Date);
  3573. param.Value = date;
  3574. cmd.ExecuteNonQuery ();
  3575. cmd.Dispose ();
  3576. cmd = conn.CreateCommand ();
  3577. cmd.CommandText = select_by_id;
  3578. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3579. param.Value = 6000;
  3580. dr = cmd.ExecuteReader ();
  3581. Assert.IsTrue (dr.Read (), "#C1");
  3582. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (0), "#C2");
  3583. Assert.AreEqual (new DateTime (2004, 2, 21), dr.GetValue (0), "#C3");
  3584. Assert.IsFalse (dr.Read (), "#C4");
  3585. dr.Close ();
  3586. cmd.Dispose ();
  3587. DBHelper.ExecuteNonQuery (conn, delete_data);
  3588. cmd = conn.CreateCommand ();
  3589. cmd.CommandText = insert_data;
  3590. param = cmd.Parameters.Add ("type_date", OdbcType.Date);
  3591. param.Value = DBNull.Value;
  3592. cmd.ExecuteNonQuery ();
  3593. cmd.Dispose ();
  3594. cmd = conn.CreateCommand ();
  3595. cmd.CommandText = select_by_id;
  3596. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3597. param.Value = 6000;
  3598. dr = cmd.ExecuteReader ();
  3599. Assert.IsTrue (dr.Read (), "#D1");
  3600. Assert.AreEqual (typeof (DateTime), dr.GetFieldType (0), "#D2");
  3601. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#D3");
  3602. Assert.IsFalse (dr.Read (), "#D4");
  3603. dr.Close ();
  3604. cmd.Dispose ();
  3605. } finally {
  3606. if (dr != null)
  3607. dr.Close ();
  3608. if (cmd != null)
  3609. cmd.Dispose ();
  3610. conn.Close ();
  3611. conn.Open ();
  3612. DBHelper.ExecuteNonQuery (conn, delete_data);
  3613. conn.Close ();
  3614. }
  3615. }
  3616. [Test]
  3617. public void TimeParameterTest ()
  3618. {
  3619. string insert_data = "insert into datetime_family (id, type_time) values (6000, ?)";
  3620. string select_data = "select type_time from datetime_family where type_time = ? and id = 1";
  3621. string select_by_id = "select type_time from datetime_family where id = ?";
  3622. string delete_data = "delete from datetime_family where id = 6000";
  3623. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  3624. conn.Open ();
  3625. IDataReader dr = null;
  3626. OdbcCommand cmd = null;
  3627. OdbcParameter param;
  3628. try {
  3629. if (!ConnectionManager.Singleton.Engine.SupportsTime)
  3630. Assert.Ignore ("Time test does not apply to the current driver (" + conn.Driver + ").");
  3631. TimeSpan time = ConnectionManager.Singleton.Engine.SupportsMicroseconds ?
  3632. new TimeSpan (23, 58, 59, 953) : new TimeSpan (23, 58, 59);
  3633. cmd = conn.CreateCommand ();
  3634. cmd.CommandText = select_data;
  3635. param = cmd.Parameters.Add ("type_time", OdbcType.Time);
  3636. param.Value = time;
  3637. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3638. param.Value = 1;
  3639. dr = cmd.ExecuteReader ();
  3640. Assert.IsTrue (dr.Read (), "#A1");
  3641. Assert.AreEqual (typeof (TimeSpan), dr.GetFieldType (0), "#A2");
  3642. Assert.AreEqual (time, dr.GetValue (0), "#A3");
  3643. Assert.IsFalse (dr.Read (), "#A4");
  3644. dr.Close ();
  3645. cmd.Dispose ();
  3646. cmd = conn.CreateCommand ();
  3647. cmd.CommandText = select_by_id;
  3648. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3649. param.Value = 4;
  3650. dr = cmd.ExecuteReader ();
  3651. Assert.IsTrue (dr.Read (), "#B1");
  3652. Assert.AreEqual (typeof (TimeSpan), dr.GetFieldType (0), "#B2");
  3653. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#B3");
  3654. Assert.IsFalse (dr.Read (), "#B4");
  3655. dr.Close ();
  3656. cmd.Dispose ();
  3657. time = new TimeSpan (23, 56, 43);
  3658. cmd = conn.CreateCommand ();
  3659. cmd.CommandText = insert_data;
  3660. param = cmd.Parameters.Add ("type_time", OdbcType.Time);
  3661. param.Value = time;
  3662. cmd.ExecuteNonQuery ();
  3663. cmd.Dispose ();
  3664. cmd = conn.CreateCommand ();
  3665. cmd.CommandText = select_by_id;
  3666. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3667. param.Value = 6000;
  3668. dr = cmd.ExecuteReader ();
  3669. Assert.IsTrue (dr.Read (), "#C1");
  3670. Assert.AreEqual (typeof (TimeSpan), dr.GetFieldType (0), "#C2");
  3671. Assert.AreEqual (time, dr.GetValue (0), "#C3");
  3672. Assert.IsFalse (dr.Read (), "#C4");
  3673. dr.Close ();
  3674. cmd.Dispose ();
  3675. DBHelper.ExecuteNonQuery (conn, delete_data);
  3676. cmd = conn.CreateCommand ();
  3677. cmd.CommandText = insert_data;
  3678. param = cmd.Parameters.Add ("type_time", OdbcType.Date);
  3679. param.Value = DBNull.Value;
  3680. cmd.ExecuteNonQuery ();
  3681. cmd.Dispose ();
  3682. cmd = conn.CreateCommand ();
  3683. cmd.CommandText = select_by_id;
  3684. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3685. param.Value = 6000;
  3686. dr = cmd.ExecuteReader ();
  3687. Assert.IsTrue (dr.Read (), "#D1");
  3688. Assert.AreEqual (typeof (TimeSpan), dr.GetFieldType (0), "#D2");
  3689. Assert.AreEqual (DBNull.Value, dr.GetValue (0), "#D3");
  3690. Assert.IsFalse (dr.Read (), "#D4");
  3691. dr.Close ();
  3692. cmd.Dispose ();
  3693. } finally {
  3694. if (dr != null)
  3695. dr.Close ();
  3696. if (cmd != null)
  3697. cmd.Dispose ();
  3698. conn.Close ();
  3699. conn.Open ();
  3700. DBHelper.ExecuteNonQuery (conn, delete_data);
  3701. conn.Close ();
  3702. }
  3703. }
  3704. [Test]
  3705. public void UniqueIdentifierParameterTest ()
  3706. {
  3707. string insert_data = "insert into string_family (id, type_guid) values (6000, ?)";
  3708. string select_data = "select id, type_guid from string_family where type_guid = ? and id = ?";
  3709. string select_by_id = "select id, type_guid from string_family where id = ?";
  3710. string delete_data = "delete from string_family where id = 6000";
  3711. OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
  3712. conn.Open ();
  3713. IDataReader dr = null;
  3714. OdbcCommand cmd = null;
  3715. OdbcParameter param;
  3716. try {
  3717. if (!ConnectionManager.Singleton.Engine.SupportsUniqueIdentifier)
  3718. Assert.Ignore ("UniqueIdentifier test does not apply to the current driver (" + conn.Driver + ").");
  3719. cmd = conn.CreateCommand ();
  3720. cmd.CommandText = select_data;
  3721. param = cmd.Parameters.Add ("type_guid", OdbcType.UniqueIdentifier);
  3722. param.Value = new Guid ("d222a130-6383-4d36-ac5e-4e6b2591aabf");
  3723. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3724. param.Value = 1;
  3725. dr = cmd.ExecuteReader ();
  3726. Assert.IsTrue (dr.Read (), "#A1");
  3727. Assert.AreEqual (1, dr.GetValue (0), "#A2");
  3728. Assert.AreEqual (new Guid ("d222a130-6383-4d36-ac5e-4e6b2591aabf"), dr.GetValue (1), "#A3");
  3729. Assert.IsFalse (dr.Read (), "#A4");
  3730. dr.Close ();
  3731. cmd.Dispose ();
  3732. cmd = conn.CreateCommand ();
  3733. cmd.CommandText = select_by_id;
  3734. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3735. param.Value = 4;
  3736. dr = cmd.ExecuteReader ();
  3737. Assert.IsTrue (dr.Read (), "#B1");
  3738. Assert.AreEqual (4, dr.GetValue (0), "#B2");
  3739. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#B3");
  3740. Assert.IsFalse (dr.Read (), "#B4");
  3741. dr.Close ();
  3742. cmd.Dispose ();
  3743. cmd = (OdbcCommand) conn.CreateCommand ();
  3744. cmd.CommandText = insert_data;
  3745. param = cmd.Parameters.Add ("type_guid", OdbcType.UniqueIdentifier);
  3746. param.Value = new Guid ("e222a130-6383-4d36-ac5e-4e6b2591aabe");
  3747. cmd.ExecuteNonQuery ();
  3748. cmd.Dispose ();
  3749. cmd = conn.CreateCommand ();
  3750. cmd.CommandText = select_data;
  3751. param = cmd.Parameters.Add ("type_guid", OdbcType.UniqueIdentifier);
  3752. param.Value = new Guid ("e222a130-6383-4d36-ac5e-4e6b2591aabe");
  3753. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3754. param.Value = 6000;
  3755. dr = cmd.ExecuteReader ();
  3756. Assert.IsTrue (dr.Read (), "#C1");
  3757. Assert.AreEqual (6000, dr.GetValue (0), "#C2");
  3758. Assert.AreEqual (new Guid ("e222a130-6383-4d36-ac5e-4e6b2591aabe"), dr.GetValue (1), "#C3");
  3759. Assert.IsFalse (dr.Read (), "#C4");
  3760. dr.Close ();
  3761. cmd.Dispose ();
  3762. DBHelper.ExecuteNonQuery (conn, delete_data);
  3763. cmd = (OdbcCommand) conn.CreateCommand ();
  3764. cmd.CommandText = insert_data;
  3765. param = cmd.Parameters.Add ("type_guid", OdbcType.UniqueIdentifier);
  3766. param.Value = DBNull.Value;
  3767. cmd.ExecuteNonQuery ();
  3768. cmd.Dispose ();
  3769. cmd = conn.CreateCommand ();
  3770. cmd.CommandText = select_by_id;
  3771. param = cmd.Parameters.Add ("id", OdbcType.Int);
  3772. param.Value = 6000;
  3773. dr = cmd.ExecuteReader ();
  3774. Assert.IsTrue (dr.Read (), "#D1");
  3775. Assert.AreEqual (6000, dr.GetValue (0), "#D2");
  3776. Assert.AreEqual (DBNull.Value, dr.GetValue (1), "#D3");
  3777. Assert.IsFalse (dr.Read (), "#D4");
  3778. dr.Close ();
  3779. cmd.Dispose ();
  3780. } finally {
  3781. if (dr != null)
  3782. dr.Close ();
  3783. if (cmd != null)
  3784. cmd.Dispose ();
  3785. conn.Close ();
  3786. conn.Open ();
  3787. DBHelper.ExecuteNonQuery (conn, delete_data);
  3788. conn.Close ();
  3789. }
  3790. }
  3791. [Test]
  3792. public void DBNullParameterTest()
  3793. {
  3794. IDbConnection conn = ConnectionManager.Singleton.Connection;
  3795. try {
  3796. ConnectionManager.Singleton.OpenConnection ();
  3797. OdbcDataAdapter Adaptador = new OdbcDataAdapter ();
  3798. DataSet Lector = new DataSet ();
  3799. Adaptador.SelectCommand = new OdbcCommand ("SELECT ?;", (OdbcConnection) conn);
  3800. #if NET_2_0
  3801. Adaptador.SelectCommand.Parameters.AddWithValue("@un", DBNull.Value);
  3802. #else
  3803. Adaptador.SelectCommand.Parameters.Add ("@un", (object) DBNull.Value);
  3804. #endif
  3805. Adaptador.Fill (Lector);
  3806. Assert.AreEqual (Lector.Tables[0].Rows[0][0], DBNull.Value, "#1 DBNull parameter not passed correctly");
  3807. } finally {
  3808. ConnectionManager.Singleton.CloseConnection ();
  3809. }
  3810. }
  3811. [Test]
  3812. public void ParameterName ()
  3813. {
  3814. OdbcParameter p = new OdbcParameter ();
  3815. p.ParameterName = "foo1";
  3816. Assert.AreEqual ("foo1", p.ParameterName, "#1");
  3817. p.ParameterName = null;
  3818. Assert.AreEqual (string.Empty, p.ParameterName, "#2");
  3819. p.ParameterName = "foo2";
  3820. Assert.AreEqual ("foo2", p.ParameterName, "#3");
  3821. p.ParameterName = string.Empty;
  3822. Assert.AreEqual (string.Empty, p.ParameterName, "#4");
  3823. }
  3824. [Test]
  3825. public void SourceColumn ()
  3826. {
  3827. OdbcParameter p = new OdbcParameter ();
  3828. p.SourceColumn = "foo1";
  3829. Assert.AreEqual ("foo1", p.SourceColumn, "#1");
  3830. p.SourceColumn = null;
  3831. Assert.AreEqual (string.Empty, p.SourceColumn, "#2");
  3832. p.SourceColumn = "foo2";
  3833. Assert.AreEqual ("foo2", p.SourceColumn, "#3");
  3834. p.SourceColumn = string.Empty;
  3835. Assert.AreEqual (string.Empty, p.SourceColumn, "#4");
  3836. }
  3837. [Test]
  3838. public void DefaultValuesTest ()
  3839. {
  3840. OdbcParameter p;
  3841. p = new OdbcParameter();
  3842. Assert.AreEqual (DbType.String, p.DbType, "#A:DbType");
  3843. Assert.AreEqual (ParameterDirection.Input, p.Direction, "#A:Direction");
  3844. Assert.IsFalse (p.IsNullable, "#A:IsNullable");
  3845. Assert.AreEqual (OdbcType.NVarChar, p.OdbcType, "#A:OdbcType");
  3846. Assert.AreEqual (String.Empty, p.ParameterName, "#A:ParameterName");
  3847. Assert.AreEqual (0, p.Precision, "#A:Precision");
  3848. Assert.AreEqual (0, p.Scale, "#A:Scale");
  3849. Assert.AreEqual (0, p.Size, "#A:Size");
  3850. Assert.AreEqual (String.Empty, p.SourceColumn, "#A:SourceColumn");
  3851. #if NET_2_0
  3852. Assert.IsFalse (p.SourceColumnNullMapping, "#A:SourceColumnNullMapping");
  3853. #endif
  3854. Assert.AreEqual (DataRowVersion.Current, p.SourceVersion, "#A:SourceVersion");
  3855. Assert.IsNull (p.Value, "#A:Value");
  3856. p = new OdbcParameter(null, 2);
  3857. Assert.AreEqual (DbType.String, p.DbType, "#B:DbType");
  3858. Assert.AreEqual (ParameterDirection.Input, p.Direction, "#B:Direction");
  3859. Assert.IsFalse (p.IsNullable, "#B:IsNullable");
  3860. Assert.AreEqual (OdbcType.NVarChar, p.OdbcType, "#B:OdbcType");
  3861. Assert.AreEqual (String.Empty, p.ParameterName, "#B:ParameterName");
  3862. Assert.AreEqual (0, p.Precision, "#B:Precision");
  3863. Assert.AreEqual (0, p.Scale, "#B:Scale");
  3864. Assert.AreEqual (0, p.Size, "#B:Size");
  3865. Assert.AreEqual (String.Empty, p.SourceColumn, "#B:SourceColumn");
  3866. #if NET_2_0
  3867. Assert.IsFalse (p.SourceColumnNullMapping, "#B:SourceColumnNullMapping");
  3868. #endif
  3869. Assert.AreEqual (DataRowVersion.Current, p.SourceVersion, "#B:SourceVersion");
  3870. Assert.AreEqual (2, p.Value, "#B:Value");
  3871. p = new OdbcParameter("foo", 2);
  3872. Assert.AreEqual (DbType.String, p.DbType, "#C:DbType");
  3873. Assert.AreEqual (ParameterDirection.Input, p.Direction, "#C:Direction");
  3874. Assert.IsFalse (p.IsNullable, "#C:IsNullable");
  3875. Assert.AreEqual (OdbcType.NVarChar, p.OdbcType, "#C:OdbcType");
  3876. Assert.AreEqual ("foo", p.ParameterName, "#C:ParameterName");
  3877. Assert.AreEqual (0, p.Precision, "#C:Precision");
  3878. Assert.AreEqual (0, p.Scale, "#C:Scale");
  3879. Assert.AreEqual (0, p.Size, "#C:Size");
  3880. Assert.AreEqual (String.Empty, p.SourceColumn, "#C:SourceColumn");
  3881. #if NET_2_0
  3882. Assert.IsFalse (p.SourceColumnNullMapping, "#C:SourceColumnNullMapping");
  3883. #endif
  3884. Assert.AreEqual (DataRowVersion.Current, p.SourceVersion, "#C:SourceVersion");
  3885. Assert.AreEqual (2, p.Value, "#C:Value");
  3886. p = new OdbcParameter("foo1", OdbcType.Int);
  3887. Assert.AreEqual (DbType.Int32, p.DbType, "#D:DbType");
  3888. Assert.AreEqual (ParameterDirection.Input, p.Direction, "#D:Direction");
  3889. Assert.IsFalse (p.IsNullable, "#D:IsNullable");
  3890. Assert.AreEqual (OdbcType.Int, p.OdbcType, "#D:OdbcType");
  3891. Assert.AreEqual ("foo1", p.ParameterName, "#D:ParameterName");
  3892. Assert.AreEqual (0, p.Precision, "#D:Precision");
  3893. Assert.AreEqual (0, p.Scale, "#D:Scale");
  3894. Assert.AreEqual (0, p.Size, "#D:Size");
  3895. Assert.AreEqual (String.Empty, p.SourceColumn, "#D:SourceColumn");
  3896. #if NET_2_0
  3897. Assert.IsFalse (p.SourceColumnNullMapping, "#D:SourceColumnNullMapping");
  3898. #endif
  3899. Assert.AreEqual (DataRowVersion.Current, p.SourceVersion, "#D:SourceVersion");
  3900. Assert.IsNull (p.Value, "#D:Value");
  3901. }
  3902. }
  3903. }