OdbcParameterCollectionTest.cs 57 KB

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