OdbcParameterCollectionTest.cs 61 KB

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