OdbcParameterCollectionTest.cs 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210
  1. //
  2. // OdbcParameterCollectionTest.cs - NUnit Test Cases for testing the
  3. // OdbcParameterCollection class
  4. // Author:
  5. // Sureshkumar T ([email protected])
  6. // Amit Biswas ([email protected])
  7. //
  8. // Copyright (c) 2004 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. #if !NO_ODBC
  31. using System;
  32. using System.Text;
  33. using System.Data;
  34. using System.Data.Odbc;
  35. using NUnit.Framework;
  36. namespace MonoTests.System.Data.Connected.Odbc
  37. {
  38. [TestFixture]
  39. [Category ("odbc")]
  40. public class OdbcParameterCollectionTest
  41. {
  42. /// <remarks>
  43. /// This tests whether the value is trimmed to the
  44. /// given length while passing parameters
  45. /// </remarks>
  46. [Test]
  47. public void ParameterLengthTrimTest ()
  48. {
  49. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  50. try {
  51. OdbcCommand cmd = conn.CreateCommand ();
  52. cmd.CommandType = CommandType.Text;
  53. cmd.CommandText = "SELECT count(*) FROM employee WHERE fname=?";
  54. OdbcParameter param = cmd.Parameters.Add("@fname", OdbcType.VarChar, 15);
  55. param.Value = DateTime.Now.ToString ();
  56. Assert.AreEqual (15, param.Size, "#1");
  57. Assert.AreEqual (0, cmd.ExecuteScalar(), "#2");
  58. } finally {
  59. ConnectionManager.Instance.Odbc.CloseConnection ();
  60. }
  61. }
  62. [Test]
  63. public void InsertTest ()
  64. {
  65. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  66. try {
  67. OdbcCommand OdbcCmd = conn.CreateCommand ();
  68. OdbcCmd.CommandType = CommandType.Text;
  69. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  70. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  71. OdbcParameter p2Age = new OdbcParameter (); //not initialized and not yet added
  72. OdbcParameter p3Tmp = new OdbcParameter ("p3", "abc"); //not added
  73. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  74. OdbcCmd.Parameters.Insert (1, p2Age); //Inserting the second parameter
  75. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection should contain 2 parameters");
  76. //inserting at upper boundary
  77. OdbcCmd.Parameters.Insert (OdbcCmd.Parameters.Count, p3Tmp); //Inserting the third parameter, with name and value at index = count
  78. Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#3 The collection should contain 2 parameters");
  79. //check the inserted positions
  80. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"), "#4 The first parameter must be at index 0");
  81. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#5 The inserted parameter p2Age must be at index 1");
  82. Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p3Tmp), "#6 The inserted parameter p3Tmp must be at index 2");
  83. Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf ("p3"), "#7 The inserted parameter p3 must be at index 2");
  84. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("non-existing-parameter"), "#8 Non-existing parameters should return -1");
  85. //check for default names and default values
  86. Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#9 Parameters inserted without any name must get a default name");
  87. Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#10 Parameters inserted without any value must have null value");
  88. Assert.AreEqual ("p3", OdbcCmd.Parameters[2].ParameterName, "#11 Parameters inserted without any name must get a default name");
  89. Assert.AreEqual ("abc", OdbcCmd.Parameters[2].Value, "#12 Parameters inserted without any value must have null value");
  90. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#13 Parameters with null value must be of type NVarChar");
  91. Assert.AreEqual (OdbcType.Text,OdbcCmd.Parameters[0].OdbcType, "#14 Parameter at index 0 is of type Text");
  92. } finally {
  93. ConnectionManager.Instance.Odbc.CloseConnection ();
  94. }
  95. }
  96. /// <remarks>
  97. /// Inserting parameters in between the collection should not
  98. /// overwrite the existing parameters
  99. /// </remarks>
  100. [Test]
  101. public void InsertNoOverwriteTest ()
  102. {
  103. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  104. try {
  105. OdbcCommand OdbcCmd = conn.CreateCommand ();
  106. OdbcCmd.CommandType = CommandType.Text;
  107. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  108. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  109. OdbcParameter p2Age = OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
  110. OdbcParameter p3Tmp = OdbcCmd.Parameters.Add ("@Tmp", OdbcType.Text, 15);
  111. OdbcParameter p4Tmp = new OdbcParameter ();
  112. Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  113. OdbcCmd.Parameters.Insert (1, p4Tmp); //Inserting at index 1
  114. Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#2 Collection should contain 4 parameters");
  115. //Existing parameters should not be overwritten
  116. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname), "#3 The parameter at index 0 should not change");
  117. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p4Tmp), "#4 The inserted parameter should be at index 1");
  118. Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p2Age), "#5 The parameter at index 1 should be at index 2 after inserting");
  119. Assert.AreEqual (3, OdbcCmd.Parameters.IndexOf (p3Tmp), "#6 The parameter at index 2 should be at index 3 after inserting");
  120. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("non-existing-parameter"), "#7 Non-existing parameters should return -1");
  121. //check for default names and default values
  122. Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#8 Parameters inserted without any name must get a default name");
  123. Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#9 Parameters inserted without any value must have null value");
  124. } finally {
  125. ConnectionManager.Instance.Odbc.CloseConnection ();
  126. }
  127. }
  128. [Test]
  129. public void InsertNullTest ()
  130. {
  131. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  132. try {
  133. OdbcCommand OdbcCmd = conn.CreateCommand ();
  134. OdbcCmd.CommandType = CommandType.Text;
  135. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  136. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  137. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  138. try {
  139. OdbcCmd.Parameters.Insert (1, null);
  140. Assert.Fail ("Expected exception ArgumentNullException was not thrown");
  141. } catch (ArgumentNullException) {
  142. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter after Insert failed");
  143. }
  144. } finally {
  145. ConnectionManager.Instance.Odbc.CloseConnection ();
  146. }
  147. }
  148. [Test]
  149. public void InsertEmptyTest ()
  150. {
  151. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  152. try {
  153. OdbcCommand OdbcCmd = conn.CreateCommand ();
  154. OdbcCmd.CommandType = CommandType.Text;
  155. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  156. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  157. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  158. try {
  159. OdbcCmd.Parameters.Insert (1, string.Empty);
  160. Assert.Fail ("Expected exception InvalidCastException was not thrown");
  161. } catch (InvalidCastException) {
  162. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter after Insert failed");
  163. }
  164. } finally {
  165. ConnectionManager.Instance.Odbc.CloseConnection ();
  166. }
  167. }
  168. [Test]
  169. public void InsertAlreadyContainedParameterTest ()
  170. {
  171. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  172. try {
  173. OdbcCommand OdbcCmd = conn.CreateCommand ();
  174. OdbcCmd.CommandType = CommandType.Text;
  175. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  176. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  177. OdbcParameter p2Age = new OdbcParameter (); //not initialized and not yet added
  178. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  179. OdbcCmd.Parameters.Insert (1, p2Age);
  180. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain 2 parameters");
  181. try {
  182. OdbcCmd.Parameters.Insert (2, p2Age); //p2Age is already contained
  183. Assert.Fail ("Expected exception ArgumentException not thrown");
  184. } catch (ArgumentException) {
  185. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#3 The collection must contain 2 parameters after Insert failed");
  186. }
  187. } finally {
  188. ConnectionManager.Instance.Odbc.CloseConnection ();
  189. }
  190. }
  191. [Test]
  192. public void InsertArgumentGreaterThanCountTest ()
  193. {
  194. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  195. try {
  196. OdbcCommand OdbcCmd = conn.CreateCommand ();
  197. OdbcCmd.CommandType = CommandType.Text;
  198. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  199. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  200. OdbcParameter p2Age = new OdbcParameter ();
  201. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  202. try {
  203. OdbcCmd.Parameters.Insert (OdbcCmd.Parameters.Count + 1, p2Age); //Inserting with wrong index
  204. Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
  205. } catch (ArgumentOutOfRangeException) {
  206. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
  207. }
  208. } finally {
  209. ConnectionManager.Instance.Odbc.CloseConnection ();
  210. }
  211. }
  212. [Test]
  213. public void InsertNegativeArgumentTest ()
  214. {
  215. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  216. try {
  217. OdbcCommand OdbcCmd = conn.CreateCommand ();
  218. OdbcCmd.CommandType = CommandType.Text;
  219. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  220. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  221. OdbcParameter p2Age = new OdbcParameter ();
  222. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  223. try {
  224. OdbcCmd.Parameters.Insert (-3, p2Age); //Insert with negative index
  225. Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
  226. } catch (ArgumentOutOfRangeException) {
  227. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
  228. }
  229. } finally {
  230. ConnectionManager.Instance.Odbc.CloseConnection ();
  231. }
  232. }
  233. [Test]
  234. public void InsertNonOdbcParameterTest ()
  235. {
  236. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  237. try {
  238. OdbcCommand OdbcCmd = conn.CreateCommand ();
  239. OdbcCmd.CommandType = CommandType.Text;
  240. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  241. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  242. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  243. try {
  244. OdbcCmd.Parameters.Insert (1, 4);
  245. Assert.Fail ("Expected exception InvalidCastException was not thrown");
  246. } catch (InvalidCastException) {
  247. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
  248. }
  249. } finally {
  250. ConnectionManager.Instance.Odbc.CloseConnection ();
  251. }
  252. }
  253. [Test]
  254. public void AddRangeTest ()
  255. {
  256. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  257. try {
  258. OdbcCommand OdbcCmd = conn.CreateCommand ();
  259. OdbcCmd.CommandType = CommandType.Text;
  260. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  261. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  262. OdbcParameter p2Age = new OdbcParameter (); //not initialized and not yet added
  263. OdbcParameter p3Tmp = new OdbcParameter (); //not initialized and not yet added
  264. OdbcParameter p4Tmp = new OdbcParameter (); //not initialized and not yet added
  265. OdbcParameter p5Tmp = new OdbcParameter (); //not initialized and not yet added
  266. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  267. OdbcParameter [] paramArray = new OdbcParameter [4];
  268. paramArray [0] = p2Age;
  269. paramArray [1] = p3Tmp;
  270. paramArray [2] = p4Tmp;
  271. paramArray [3] = p5Tmp;
  272. OdbcCmd.Parameters.AddRange (paramArray);
  273. Assert.AreEqual (5, OdbcCmd.Parameters.Count, "#2 The array elements are not added");
  274. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#3 The first element must be added after the last parameter");
  275. Assert.AreEqual (4, OdbcCmd.Parameters.IndexOf (p5Tmp), "#4 Not all elements are added");
  276. Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#5 Parameters added without any name must get a default name");
  277. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#6 Parameters with null value must be of type NVarChar");
  278. } finally {
  279. ConnectionManager.Instance.Odbc.CloseConnection ();
  280. }
  281. }
  282. //<remarks>
  283. //If a parameter in the range is already contained, all the parameters before it are added and
  284. //all the parameters after it are rejected
  285. //</remarks>
  286. [Test]
  287. public void AddRangeParameterAlreadyContainedTest ()
  288. {
  289. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  290. try {
  291. OdbcCommand OdbcCmd = conn.CreateCommand ();
  292. OdbcCmd.CommandType = CommandType.Text;
  293. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  294. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  295. OdbcParameter p2Age = new OdbcParameter ();
  296. OdbcParameter p3Tmp = new OdbcParameter ();
  297. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  298. OdbcParameter [] paramArray = new OdbcParameter [3];
  299. paramArray [0] = p2Age;
  300. paramArray [1] = p1Lname; //p1Lname is already contained
  301. paramArray [2] = p3Tmp;
  302. try {
  303. OdbcCmd.Parameters.AddRange (paramArray);
  304. Assert.Fail ("Expected Exception ArgumentException not thrown");
  305. } catch (ArgumentException){
  306. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain excatly 2 elements after AddRange failed for the third element");
  307. }
  308. } finally {
  309. ConnectionManager.Instance.Odbc.CloseConnection ();
  310. }
  311. }
  312. //<remarks>
  313. //If a parameter in the range is null, all the elements in the range are rejected
  314. //</remarks>
  315. [Test]
  316. public void AddRangeArgumentNullExceptionTest ()
  317. {
  318. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  319. try {
  320. OdbcCommand OdbcCmd = conn.CreateCommand ();
  321. OdbcCmd.CommandType = CommandType.Text;
  322. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  323. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  324. OdbcParameter p2Age = new OdbcParameter ();
  325. OdbcParameter p3Tmp = new OdbcParameter ();
  326. OdbcParameter [] paramArray = new OdbcParameter [3];
  327. paramArray [0] = p2Age;
  328. paramArray [1] = p3Tmp;
  329. paramArray [2] = null;
  330. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  331. try {
  332. OdbcCmd.Parameters.AddRange (paramArray);
  333. Assert.Fail ("Expected Exception ArgumentNullException not thrown");
  334. } catch (ArgumentNullException){
  335. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 If any of the parameters in the range is null, none of them should be added");
  336. }
  337. } finally {
  338. ConnectionManager.Instance.Odbc.CloseConnection ();
  339. }
  340. }
  341. [Test]
  342. public void AddRangeParameterContainedInAnotherCollTest ()
  343. {
  344. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  345. try {
  346. OdbcCommand OdbcCmd = conn.CreateCommand ();
  347. OdbcCmd.CommandType = CommandType.Text;
  348. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  349. OdbcCommand OdbcCmd2 = conn.CreateCommand ();
  350. OdbcCmd2.CommandType = CommandType.Text;
  351. OdbcCmd2.CommandText = "SELECT lname FROM employee WHERE fname=? AND age=?";
  352. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  353. OdbcParameter p2Age = new OdbcParameter ();
  354. OdbcParameter p3Tmp = new OdbcParameter ();
  355. OdbcParameter [] paramArray = new OdbcParameter [3];
  356. paramArray [0] = p2Age;
  357. paramArray [1] = p1Lname; //p1Lname is already contained in Odbccmd
  358. paramArray [2] = p3Tmp;
  359. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the parameter collection of OdbcCmd should contain only 1 parameter");
  360. Assert.AreEqual (0, OdbcCmd2.Parameters.Count, "#2 Initialization error, the parameter collection of OdbcCmd2 should not contain any parameters");
  361. try {
  362. OdbcCmd2.Parameters.AddRange (paramArray);
  363. Assert.Fail ("Expected Exception ArgumentException not thrown");
  364. } catch (ArgumentException) {
  365. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The parameter collection of OdbcCmd should not change");
  366. Assert.AreEqual (1, OdbcCmd2.Parameters.Count, "#4 All the elements before the invalid element must be added to the collection of OdbcCmd2");
  367. }
  368. } finally {
  369. ConnectionManager.Instance.Odbc.CloseConnection ();
  370. }
  371. }
  372. [Test]
  373. public void AddRangeMultiDimensionalArrayTest ()
  374. {
  375. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  376. try {
  377. OdbcCommand OdbcCmd = conn.CreateCommand ();
  378. OdbcCmd.CommandType = CommandType.Text;
  379. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  380. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  381. OdbcParameter p2Age = new OdbcParameter ();
  382. OdbcParameter p3Tmp = new OdbcParameter ();
  383. OdbcParameter p4Tmp = new OdbcParameter ();
  384. OdbcParameter p5Tmp = new OdbcParameter ();
  385. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  386. OdbcParameter [,] paramArray = new OdbcParameter [2, 2];
  387. paramArray [0, 0] = p2Age;
  388. paramArray [0, 1] = p3Tmp;
  389. paramArray [1, 0] = p4Tmp;
  390. paramArray [1, 1] = p5Tmp;
  391. OdbcCmd.Parameters.AddRange (paramArray);
  392. Assert.AreEqual (5, OdbcCmd.Parameters.Count, "#2 Not all four parameters of the 2x2 Array are added");
  393. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#3 The first element must be added after the last parameter");
  394. Assert.AreEqual (4, OdbcCmd.Parameters.IndexOf (p5Tmp), "#4 Not all elements are added");
  395. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[4].OdbcType, "#5 Parameters with null value must be of type NVarChar");
  396. } finally {
  397. ConnectionManager.Instance.Odbc.CloseConnection ();
  398. }
  399. }
  400. [Test]
  401. public void AddRangeArrayValuesArgumentNullExceptionTest ()
  402. {
  403. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  404. try {
  405. OdbcCommand OdbcCmd = conn.CreateCommand ();
  406. OdbcCmd.CommandType = CommandType.Text;
  407. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  408. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  409. OdbcParameter p2Age = new OdbcParameter ();
  410. OdbcParameter p3Tmp = new OdbcParameter ();
  411. OdbcParameter p5Tmp = new OdbcParameter ();
  412. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  413. OdbcParameter [,] paramArray = new OdbcParameter [2, 2];
  414. paramArray [0, 0] = p2Age;
  415. paramArray [0, 1] = p3Tmp;
  416. paramArray [1, 0] = null;
  417. paramArray [1, 1] = p5Tmp;
  418. try {
  419. OdbcCmd.Parameters.AddRange (paramArray);
  420. Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
  421. } catch (ArgumentNullException) {
  422. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 None of the elememts must be added if any one of them is null");
  423. }
  424. } finally {
  425. ConnectionManager.Instance.Odbc.CloseConnection ();
  426. }
  427. }
  428. //<remarks>
  429. //Tests all the three overloads of Contains
  430. //</remarks>
  431. [Test]
  432. public void ContainsTest ()
  433. {
  434. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  435. try {
  436. OdbcCommand OdbcCmd = conn.CreateCommand ();
  437. OdbcCmd.CommandType = CommandType.Text;
  438. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  439. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  440. /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
  441. OdbcParameter p3Tmp = new OdbcParameter ();
  442. OdbcCmd.Parameters.Insert (2, p3Tmp);
  443. Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#1 Not all parameters are added");
  444. Assert.IsTrue (OdbcCmd.Parameters.Contains (p1Lname), "#2 Contains failed for OdbcParameter value");
  445. Assert.IsTrue (OdbcCmd.Parameters.Contains ("@age"), "#3 Contains failed for string value");
  446. Assert.IsTrue (OdbcCmd.Parameters.Contains (p3Tmp), "#4 Contains failed for object value");
  447. Assert.IsFalse (OdbcCmd.Parameters.Contains (null), "#5 Contains must return false for null value");
  448. Assert.IsFalse (OdbcCmd.Parameters.Contains (""), "#6 Contains must return false for empty string");
  449. Assert.IsFalse (OdbcCmd.Parameters.Contains ((Object)null), "#6 Contains must return false for empty string");
  450. Assert.IsFalse (OdbcCmd.Parameters.Contains ((String)null), "#6 Contains must return false for empty string");
  451. } finally {
  452. ConnectionManager.Instance.Odbc.CloseConnection ();
  453. }
  454. }
  455. [Test]
  456. public void ContainsNonOdbcParameterTest ()
  457. {
  458. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  459. try {
  460. OdbcCommand OdbcCmd = conn.CreateCommand ();
  461. OdbcCmd.CommandType = CommandType.Text;
  462. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  463. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  464. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 The collection must contain only one parameter");
  465. try{
  466. Assert.IsFalse (OdbcCmd.Parameters.Contains (4), "#2 Contains must return false for non-odbcParameter arguments");
  467. Assert.Fail ("Expected Exception InvalidCastException not thrown");
  468. } catch (InvalidCastException) {
  469. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The collection must contain only one parameter");
  470. }
  471. } finally {
  472. ConnectionManager.Instance.Odbc.CloseConnection ();
  473. }
  474. }
  475. [Test]
  476. public void ContainsCaseSensitivityTest ()
  477. {
  478. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  479. try {
  480. OdbcCommand OdbcCmd = conn.CreateCommand ();
  481. OdbcCmd.CommandType = CommandType.Text;
  482. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  483. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  484. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  485. Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@lname"), "#2 Case sensitivity failed for Contains, should be case insensitive");
  486. Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@LNAME"), "#3 Case sensitivity failed for Contains, should be case insensitive");
  487. Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@LnAmE"), "#4 Case sensitivity failed for Contains, should be case insensitive");
  488. } finally {
  489. ConnectionManager.Instance.Odbc.CloseConnection ();
  490. }
  491. }
  492. [Test]
  493. public void ContainsNotMineTest ()
  494. {
  495. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  496. try {
  497. OdbcCommand OdbcCmd1 = conn.CreateCommand ();
  498. OdbcCommand OdbcCmd2 = conn.CreateCommand ();
  499. OdbcCmd1.CommandType = CommandType.Text;
  500. OdbcCmd1.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  501. OdbcCmd2.CommandType = CommandType.Text;
  502. OdbcCmd2.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  503. OdbcParameter p1 = OdbcCmd1.Parameters.Add ("@lname", OdbcType.Text, 15);
  504. OdbcParameter p2 = OdbcCmd2.Parameters.Add ("@lname", OdbcType.Text, 15);
  505. Assert.IsTrue (OdbcCmd1.Parameters.Contains (p1));
  506. Assert.IsFalse (OdbcCmd1.Parameters.Contains (p2));
  507. } finally {
  508. ConnectionManager.Instance.Odbc.CloseConnection ();
  509. }
  510. }
  511. [Test]
  512. public void IndexOfTest ()
  513. {
  514. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  515. try {
  516. OdbcCommand OdbcCmd = conn.CreateCommand ();
  517. OdbcCmd.CommandType = CommandType.Text;
  518. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  519. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  520. OdbcParameter p2Age = OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
  521. OdbcParameter p3Tmp = new OdbcParameter ();
  522. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  523. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname), "#1 first parameter not with index 0");
  524. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#2 second parameter not with index 1");
  525. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (p3Tmp), "#3 non-existing parameter should return -1");
  526. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#4 null value should return -1");
  527. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#5 Empty string parameter should return -1");
  528. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((string)null), "#6 Null string parameter should return -1");
  529. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("foo"), "#7 non-existing string parameter should return -1");
  530. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ((Object)p2Age), "#8 second parameter passed as Object did not return index 1");
  531. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((Object)p3Tmp), "#9 non-existing parameter passed as Object did not return index -1");
  532. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((Object)null), "#10 null parameter passed as Object should return index -1");
  533. } finally {
  534. ConnectionManager.Instance.Odbc.CloseConnection ();
  535. }
  536. }
  537. [Test]
  538. public void IndexOfCaseSensitivityTest ()
  539. {
  540. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  541. try {
  542. OdbcCommand OdbcCmd = conn.CreateCommand ();
  543. OdbcCmd.CommandType = CommandType.Text;
  544. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  545. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  546. /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@AGE", OdbcType.Int, 2);
  547. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  548. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"), "#2 Case sensitivity failed for IndexOf, should be case insensitive");
  549. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@LNAME"), "#3 Case sensitivity failed for IndexOf, should be case insensitive");
  550. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@AGE"), "#4 Case sensitivity failed for IndexOf, should be case insensitive");
  551. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@age"), "#5 Case sensitivity failed for IndexOf, should be case insensitive");
  552. } finally {
  553. ConnectionManager.Instance.Odbc.CloseConnection ();
  554. }
  555. }
  556. [Test]
  557. public void IndexOfNonOdbcParameterTest ()
  558. {
  559. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  560. try {
  561. OdbcCommand OdbcCmd = conn.CreateCommand ();
  562. OdbcCmd.CommandType = CommandType.Text;
  563. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  564. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  565. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 The collection must contain only one parameter");
  566. try{
  567. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (4), "#2 IndexOf must return -1 for non-odbcParameter arguments");
  568. Assert.Fail ("Expected Exception InvalidCastException not thrown");
  569. } catch (InvalidCastException) {
  570. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The collection must contain only one parameter");
  571. }
  572. } finally {
  573. ConnectionManager.Instance.Odbc.CloseConnection ();
  574. }
  575. }
  576. [Test]
  577. public void CopyToTest ()
  578. {
  579. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  580. try {
  581. OdbcCommand OdbcCmd = conn.CreateCommand ();
  582. OdbcCmd.CommandType = CommandType.Text;
  583. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  584. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  585. /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
  586. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  587. OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
  588. OdbcCmd.Parameters.CopyTo (DestinationParamArray, 1); //starting at 1 instead of 0
  589. Assert.AreEqual (4, DestinationParamArray.Length, "#2 The array length should not change");
  590. Assert.AreEqual ("@lname", DestinationParamArray [1].ParameterName, "#3 The first parameter must be copied to array at index 1");
  591. Assert.AreEqual ("@age", DestinationParamArray [2].ParameterName, "#4 The second parameter must be copied to array at index 2");
  592. Assert.AreEqual (null, DestinationParamArray [0], "#5 The remaining elements must remain un-initialized");
  593. Assert.AreEqual (null, DestinationParamArray [3], "#6 The remaining elements must remain un-initialized");
  594. } finally {
  595. ConnectionManager.Instance.Odbc.CloseConnection ();
  596. }
  597. }
  598. [Test]
  599. public void CopyToArgumentExceptionTest ()
  600. {
  601. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  602. try {
  603. OdbcCommand OdbcCmd = conn.CreateCommand ();
  604. OdbcCmd.CommandType = CommandType.Text;
  605. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  606. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  607. /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
  608. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  609. OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
  610. try{
  611. OdbcCmd.Parameters.CopyTo (DestinationParamArray, 3); //starting at 3, thus the second element will be at index 4
  612. Assert.Fail ("Expected Exception ArgumentException not thrown");
  613. } catch (ArgumentException) {
  614. Assert.AreEqual (null, DestinationParamArray [0], "#2 The DestinationParamArray must remain un-initialized");
  615. Assert.AreEqual (null, DestinationParamArray [1], "#3 The DestinationParamArray must remain un-initialized");
  616. Assert.AreEqual (null, DestinationParamArray [2], "#4 The DestinationParamArray must remain un-initialized");
  617. Assert.AreEqual (null, DestinationParamArray [3], "#5 The DestinationParamArray must remain un-initialized");
  618. }
  619. } finally {
  620. ConnectionManager.Instance.Odbc.CloseConnection ();
  621. }
  622. }
  623. [Test]
  624. public void CopyToMultiDimensionalArrayTest ()
  625. {
  626. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  627. try {
  628. OdbcCommand OdbcCmd = conn.CreateCommand ();
  629. OdbcCmd.CommandType = CommandType.Text;
  630. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  631. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  632. /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
  633. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  634. OdbcParameter [,] DestinationParamArray = new OdbcParameter [2, 4];
  635. try{
  636. OdbcCmd.Parameters.CopyTo (DestinationParamArray, 1); //DestinationParamArray is multi Dimensional
  637. Assert.Fail ("Expected Exception ArgumentException not thrown");
  638. } catch (ArgumentException) {
  639. Assert.AreEqual (null, DestinationParamArray [0, 0], "#2 The DestinationParamArray must remain un-initialized");
  640. Assert.AreEqual (null, DestinationParamArray [0, 1], "#3 The DestinationParamArray must remain un-initialized");
  641. Assert.AreEqual (null, DestinationParamArray [1, 2], "#4 The DestinationParamArray must remain un-initialized");
  642. Assert.AreEqual (null, DestinationParamArray [1, 3], "#5 The DestinationParamArray must remain un-initialized");
  643. }
  644. } finally {
  645. ConnectionManager.Instance.Odbc.CloseConnection ();
  646. }
  647. }
  648. [Test]
  649. public void CopyToLowerBoundCheckTest ()
  650. {
  651. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  652. try {
  653. OdbcCommand OdbcCmd = conn.CreateCommand ();
  654. OdbcCmd.CommandType = CommandType.Text;
  655. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  656. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  657. /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
  658. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  659. OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
  660. try {
  661. OdbcCmd.Parameters.CopyTo (DestinationParamArray, -1); //index must be >= 0
  662. Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
  663. } catch (ArgumentOutOfRangeException) {
  664. Assert.AreEqual (null, DestinationParamArray [0], "#2 The DestinationParamArray must remain un-initialized");
  665. Assert.AreEqual (null, DestinationParamArray [1], "#3 The DestinationParamArray must remain un-initialized");
  666. Assert.AreEqual (null, DestinationParamArray [2], "#4 The DestinationParamArray must remain un-initialized");
  667. Assert.AreEqual (null, DestinationParamArray [3], "#5 The DestinationParamArray must remain un-initialized");
  668. }
  669. } finally {
  670. ConnectionManager.Instance.Odbc.CloseConnection ();
  671. }
  672. }
  673. [Test]
  674. public void DuplicateParameterNameTest ()
  675. {
  676. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  677. try {
  678. OdbcCommand OdbcCmd = conn.CreateCommand ();
  679. OdbcCmd.CommandType = CommandType.Text;
  680. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  681. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  682. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  683. OdbcParameter p2Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  684. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 Collection should contain 2 parameters");
  685. //Checking IndexOf (string) overload
  686. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"));
  687. //Checking IndexOf (OdbcParameter) overload
  688. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname));
  689. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Lname));
  690. //Checking IndexOf (object) overload
  691. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ((object) p1Lname));
  692. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ((object) p2Lname));
  693. } finally {
  694. ConnectionManager.Instance.Odbc.CloseConnection ();
  695. }
  696. }
  697. [Test]
  698. public void RemoveTest ()
  699. {
  700. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  701. try {
  702. OdbcCommand OdbcCmd = conn.CreateCommand ();
  703. OdbcCmd.CommandType = CommandType.Text;
  704. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  705. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  706. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  707. OdbcCmd.Parameters.Remove (p1Lname);
  708. Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#2 Collection should not contain any parameters");
  709. } finally {
  710. ConnectionManager.Instance.Odbc.CloseConnection ();
  711. }
  712. }
  713. [Test]
  714. public void RemoveNullTest ()
  715. {
  716. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  717. try {
  718. OdbcCommand OdbcCmd = conn.CreateCommand ();
  719. OdbcCmd.CommandType = CommandType.Text;
  720. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  721. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  722. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  723. try {
  724. OdbcCmd.Parameters.Remove (null);
  725. Assert.Fail ("Expected exception ArgumentNullException was not thrown");
  726. } catch (ArgumentNullException) {
  727. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
  728. }
  729. } finally {
  730. ConnectionManager.Instance.Odbc.CloseConnection ();
  731. }
  732. }
  733. [Test]
  734. public void RemoveEmptyTest ()
  735. {
  736. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  737. try {
  738. OdbcCommand OdbcCmd = conn.CreateCommand ();
  739. OdbcCmd.CommandType = CommandType.Text;
  740. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  741. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  742. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  743. try {
  744. OdbcCmd.Parameters.Remove (string.Empty);
  745. Assert.Fail ("Expected exception InvalidCastException was not thrown");
  746. } catch (InvalidCastException) {
  747. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
  748. }
  749. } finally {
  750. ConnectionManager.Instance.Odbc.CloseConnection ();
  751. }
  752. }
  753. [Test]
  754. public void RemoveNonOdbcParameterTest ()
  755. {
  756. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  757. try {
  758. OdbcCommand OdbcCmd = conn.CreateCommand ();
  759. OdbcCmd.CommandType = CommandType.Text;
  760. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  761. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  762. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  763. try {
  764. OdbcCmd.Parameters.Remove (4);
  765. Assert.Fail ("Expected exception InvalidCastException was not thrown");
  766. } catch (InvalidCastException) {
  767. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
  768. }
  769. } finally {
  770. ConnectionManager.Instance.Odbc.CloseConnection ();
  771. }
  772. }
  773. [Test]
  774. public void RemoveNonExistingParameterTest ()
  775. {
  776. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  777. try {
  778. OdbcCommand OdbcCmd = conn.CreateCommand ();
  779. OdbcCmd.CommandType = CommandType.Text;
  780. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  781. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  782. /*OdbcParameter p2Age = new OdbcParameter ();*/
  783. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  784. OdbcCmd.Parameters.Remove (p1Lname);
  785. Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#2 Collection should not contain any parameters");
  786. try {
  787. OdbcCmd.Parameters.Remove (p1Lname);
  788. Assert.Fail ("Expected exception ArgumentException not thrown");
  789. } catch (ArgumentException) {
  790. Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#3 The collection should not contain any parameters");
  791. }
  792. } finally {
  793. ConnectionManager.Instance.Odbc.CloseConnection ();
  794. }
  795. }
  796. [Test]
  797. public void RemoveParameterContainedInAnotherCollTest ()
  798. {
  799. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  800. try {
  801. OdbcCommand OdbcCmd = conn.CreateCommand ();
  802. OdbcCmd.CommandType = CommandType.Text;
  803. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  804. OdbcCommand OdbcCmd2 = conn.CreateCommand ();
  805. OdbcCmd2.CommandType = CommandType.Text;
  806. OdbcCmd2.CommandText = "SELECT lname FROM employee WHERE fname=? AND age=?";
  807. OdbcParameter p1 = OdbcCmd.Parameters.Add ("@p1", OdbcType.Text, 15);
  808. /*OdbcParameter p2 = */OdbcCmd.Parameters.Add ("@p2", OdbcType.Text, 15);
  809. /*OdbcParameter p3 = */OdbcCmd2.Parameters.Add ("@p3", OdbcType.Text, 15);
  810. /*OdbcParameter p4 = */OdbcCmd2.Parameters.Add ("@p4", OdbcType.Text, 15);
  811. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#5 The parameter collection of OdbcCmd should contain 2 parameters");
  812. Assert.AreEqual (2, OdbcCmd2.Parameters.Count, "#6 The parameter collection of OdbcCmd2 should contain 2 parameters");
  813. try {
  814. OdbcCmd2.Parameters.Remove (p1);
  815. Assert.Fail ("Expected Exception ArgumentException not thrown");
  816. } catch (ArgumentException) {
  817. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#5 The parameter collection of OdbcCmd should contain 2 parameters");
  818. Assert.AreEqual (2, OdbcCmd2.Parameters.Count, "#6 The parameter collection of OdbcCmd2 should contain 2 parameters");
  819. }
  820. } finally {
  821. ConnectionManager.Instance.Odbc.CloseConnection ();
  822. }
  823. }
  824. [Test]
  825. public void RemoveAtTest ()
  826. {
  827. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  828. try {
  829. OdbcCommand OdbcCmd = conn.CreateCommand ();
  830. OdbcCmd.CommandType = CommandType.Text;
  831. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  832. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  833. OdbcParameter p2Age = OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
  834. OdbcParameter p3Tmp = OdbcCmd.Parameters.Add ("@p3Tmp", OdbcType.Text, 15);
  835. OdbcParameter p4Tmp = OdbcCmd.Parameters.Add ("@p4Tmp", OdbcType.Text, 15);
  836. Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  837. Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#2 the collection does not contain p1Lname");
  838. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#3 p1Lname is not at index 0");
  839. //remove the first parameter
  840. OdbcCmd.Parameters.RemoveAt (0);
  841. Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#4 Collection should contain only 3 parameters");
  842. Assert.AreEqual (false, OdbcCmd.Parameters.Contains(p1Lname), "#5 the collection should not contain p1Lname");
  843. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf(p1Lname), "#6 the collection should not contain p1Lname");
  844. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p2Age), "#7 p2Age should now be at index 0");
  845. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf(p3Tmp), "#8 p3Tmp should now be at index 1");
  846. Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf(p4Tmp), "#9 p4Tmp should now be at index 2");
  847. //remove the last parameter
  848. OdbcCmd.Parameters.RemoveAt (OdbcCmd.Parameters.Count-1);
  849. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#10 Collection should contain only 2 parameters");
  850. Assert.AreEqual (false, OdbcCmd.Parameters.Contains(p4Tmp), "#11 the collection should not contain p4Tmp");
  851. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf(p4Tmp), "#12 the collection should not contain p4Tmp");
  852. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p2Age), "#13 p2Age should be at index 0");
  853. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf(p3Tmp), "#14 p3Tmp should be at index 1");
  854. } finally {
  855. ConnectionManager.Instance.Odbc.CloseConnection ();
  856. }
  857. }
  858. [Test]
  859. public void RemoveAtOutOfRangeIndexTest ()
  860. {
  861. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  862. try {
  863. OdbcCommand OdbcCmd = conn.CreateCommand ();
  864. OdbcCmd.CommandType = CommandType.Text;
  865. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  866. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  867. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  868. try {
  869. OdbcCmd.Parameters.RemoveAt (9);
  870. Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
  871. } catch (IndexOutOfRangeException) {
  872. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
  873. Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
  874. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
  875. }
  876. } finally {
  877. ConnectionManager.Instance.Odbc.CloseConnection ();
  878. }
  879. }
  880. [Test]
  881. public void RemoveAtNegativeIndexTest ()
  882. {
  883. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  884. try {
  885. OdbcCommand OdbcCmd = conn.CreateCommand ();
  886. OdbcCmd.CommandType = CommandType.Text;
  887. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  888. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  889. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  890. try {
  891. OdbcCmd.Parameters.RemoveAt (-1);
  892. Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
  893. } catch (IndexOutOfRangeException) {
  894. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
  895. Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
  896. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
  897. }
  898. } finally {
  899. ConnectionManager.Instance.Odbc.CloseConnection ();
  900. }
  901. }
  902. [Test]
  903. public void RemoveAtBoundaryTest ()
  904. {
  905. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  906. try {
  907. OdbcCommand OdbcCmd = conn.CreateCommand ();
  908. OdbcCmd.CommandType = CommandType.Text;
  909. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  910. OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  911. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  912. try {
  913. OdbcCmd.Parameters.RemoveAt (OdbcCmd.Parameters.Count);
  914. Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
  915. } catch (IndexOutOfRangeException) {
  916. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
  917. Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
  918. Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
  919. }
  920. } finally {
  921. ConnectionManager.Instance.Odbc.CloseConnection ();
  922. }
  923. }
  924. [Test]
  925. public void AddWithValueTest ()
  926. {
  927. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  928. try {
  929. OdbcCommand OdbcCmd = conn.CreateCommand ();
  930. OdbcCmd.CommandType = CommandType.Text;
  931. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  932. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  933. OdbcParameter rt = null; //to check return type
  934. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  935. rt = OdbcCmd.Parameters.AddWithValue ("@P2", "Param2");
  936. Assert.AreEqual (typeof(OdbcParameter), rt.GetType(), "#1a AddWithValue didnt retuen type OdbcParameter");
  937. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 AddWithValue failed for valid parameter name and value");
  938. Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@P2"), "#3 collection does not contain @P2");
  939. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@P2"), "#4 Index of added parameter must be 1");
  940. Assert.AreEqual ("Param2", OdbcCmd.Parameters["@P2"].Value, "#5 Value of added parameter must be Param2");
  941. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#6 Parameters with null value must be of type NVarChar");
  942. OdbcCmd.Parameters.AddWithValue ("@P2", "Param2ReAdded"); //adding again
  943. Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#7 AddWithValue must append at the end of the collection even for same parameter names");
  944. Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@P2"), "#8 collection does not contain @P2");
  945. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@P2"), "#9 Index of @P2 must be 1");
  946. Assert.AreEqual ("Param2", OdbcCmd.Parameters["@P2"].Value, "#10 Value of added parameter must be Param2");
  947. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters["@P2"].OdbcType, "#11 Parameters with null value must be of type NVarChar");
  948. //Two different parameters with same name but at different positions ie 1 and 2
  949. Assert.AreEqual ("@P2",OdbcCmd.Parameters[1].ParameterName, "#12 The parameter at index 1 must be @P2");
  950. Assert.AreEqual ("@P2",OdbcCmd.Parameters[2].ParameterName, "#13 The parameter at index 2 must be @P2");
  951. //Confirming the parameters by checking their values
  952. Assert.AreEqual ("Param2",OdbcCmd.Parameters[1].Value, "#14The parameter at index 1 must have value Param2");
  953. Assert.AreEqual ("Param2ReAdded",OdbcCmd.Parameters[2].Value, "#15The parameter at index 2 must have value Param2ReAdded");
  954. //Testing for null values
  955. OdbcCmd.Parameters.AddWithValue (null, null);
  956. Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#16 AddWithValue must accept null parameter names and null values");
  957. Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#17 AddWithValue must return false for Contains (null)");
  958. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#18 AddWithValue must return -1 for IndexOf (null)");
  959. Assert.AreEqual (null, OdbcCmd.Parameters["Parameter1"].Value, "#19 Value of added parameter must be null");
  960. Assert.AreEqual ("Parameter1",OdbcCmd.Parameters[3].ParameterName, "#20 The parameter at index 3 must be Parameter1");
  961. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[3].OdbcType, "#21 Parameters with null value must be of type NVarChar");
  962. OdbcCmd.Parameters.AddWithValue (null, null); //adding another null parameter
  963. Assert.AreEqual (5, OdbcCmd.Parameters.Count, "#22 AddWithValue must accept null parameter names and null values");
  964. Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#23 AddWithValue must return false for Contains (null)");
  965. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#24 AddWithValue must return -1 for IndexOf (null)");
  966. Assert.AreEqual (null, OdbcCmd.Parameters["Parameter2"].Value, "#25 Value of added parameter must be null");
  967. Assert.AreEqual ("Parameter2",OdbcCmd.Parameters[4].ParameterName, "#26 The parameter at index 1 must be Parameter2");
  968. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[4].OdbcType, "#27 Parameters with null value must be of type NVarChar");
  969. //Testing for empty strings
  970. OdbcCmd.Parameters.AddWithValue ("", ""); //adding empty parameter
  971. Assert.AreEqual (6, OdbcCmd.Parameters.Count, "#28 AddWithValue must accept empty names and empty values");
  972. Assert.AreEqual (false, OdbcCmd.Parameters.Contains (""), "#29 AddWithValue must return false for Contains ('')");
  973. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#30 AddWithValue must return -1 for IndexOf ('')");
  974. Assert.AreEqual ("Parameter3",OdbcCmd.Parameters[5].ParameterName, "#31 The parameter at index 5 must be Parameter3");
  975. Assert.AreEqual ("",OdbcCmd.Parameters[5].Value, "#32 The parameter at index 5 must have value as empty string");
  976. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[5].OdbcType, "#33 Parameters with null value must be of type NVarChar");
  977. OdbcCmd.Parameters.AddWithValue ("", ""); //adding another empty parameter
  978. Assert.AreEqual (7, OdbcCmd.Parameters.Count, "#34 AddWithValue must accept empty names and empty values");
  979. Assert.AreEqual (false, OdbcCmd.Parameters.Contains (""), "#35 AddWithValue must return false for Contains ('')");
  980. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#36 AddWithValue must return -1 for IndexOf ('')");
  981. Assert.AreEqual ("Parameter4",OdbcCmd.Parameters[6].ParameterName, "#37 The parameter at index 6 must have name as Parameter4");
  982. Assert.AreEqual ("",OdbcCmd.Parameters[6].Value, "#38 The parameter at index 6 must have value as empty string");
  983. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[6].OdbcType, "#39 Parameters with null value must be of type NVarChar");
  984. OdbcCmd.Parameters.AddWithValue ("foo", null);
  985. Assert.AreEqual (8, OdbcCmd.Parameters.Count, "#40 AddWithValue must accept string names and null values");
  986. Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("foo"), "#41 AddWithValue must return true for Contains ('foo')");
  987. Assert.AreEqual (7, OdbcCmd.Parameters.IndexOf ("foo"), "#42 AddWithValue must return 7 for IndexOf ('foo')");
  988. Assert.AreEqual ("foo",OdbcCmd.Parameters[7].ParameterName, "#43 The parameter at index 7 must have name foo");
  989. Assert.AreEqual (null,OdbcCmd.Parameters[7].Value, "#44 The parameter at index 7 must have value as null");
  990. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[7].OdbcType, "#45 Parameters with null value must be of type NVarChar");
  991. OdbcCmd.Parameters.AddWithValue (null, 2);
  992. Assert.AreEqual (9, OdbcCmd.Parameters.Count, "#46 AddWithValue must accept empty names and empty values");
  993. Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#47 AddWithValue must return false for Contains (null)");
  994. Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#48 AddWithValue must return -1 for IndexOf ('')");
  995. Assert.AreEqual ("Parameter5",OdbcCmd.Parameters[8].ParameterName, "#49 The parameter at index 8 must have name as Parameter5");
  996. Assert.AreEqual (2,OdbcCmd.Parameters[8].Value, "#50 The parameter at index 8 must have value as 2");
  997. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[8].OdbcType, "#51 Parameter must be of type NVarChar");
  998. } finally {
  999. ConnectionManager.Instance.Odbc.CloseConnection ();
  1000. }
  1001. }
  1002. [Test]
  1003. public void DefaultNamesAndValuesTest ()
  1004. {
  1005. OdbcConnection conn = ConnectionManager.Instance.Odbc.Connection;
  1006. try {
  1007. OdbcCommand OdbcCmd = conn.CreateCommand ();
  1008. OdbcCmd.CommandType = CommandType.Text;
  1009. OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
  1010. /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
  1011. Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
  1012. OdbcParameter p2Age = new OdbcParameter ();
  1013. OdbcParameter p3Tmp = new OdbcParameter ();
  1014. OdbcCmd.Parameters.Add (p2Age);
  1015. Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain 2 parameters");
  1016. Assert.AreEqual (true, OdbcCmd.Parameters.Contains (p2Age), "#3 Collection does not contain p2Age");
  1017. Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#4 Index of p2Age must be 1");
  1018. Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#5 Value of added parameter must be null");
  1019. Assert.AreEqual ("Parameter1",OdbcCmd.Parameters[1].ParameterName, "#6 The parameter must have a default name");
  1020. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#7 Parameters with null value must be of type NVarChar");
  1021. OdbcCmd.Parameters.Insert (2,p3Tmp);
  1022. Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#8 The collection must contain 3 parameters");
  1023. Assert.AreEqual (true, OdbcCmd.Parameters.Contains (p3Tmp), "#9 Collection does not contain p3Tmp");
  1024. Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p3Tmp), "#10 Index of p3Tmp must be 2");
  1025. Assert.AreEqual (null, OdbcCmd.Parameters[2].Value, "#11 Value of added parameter must be null");
  1026. Assert.AreEqual ("Parameter2",OdbcCmd.Parameters[2].ParameterName, "#12 The parameter must have a default name");
  1027. Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[2].OdbcType, "#13 Parameters with null value must be of type NVarChar");
  1028. } finally {
  1029. ConnectionManager.Instance.Odbc.CloseConnection ();
  1030. }
  1031. }
  1032. }
  1033. }
  1034. #endif