2 // OdbcParameterCollectionTest.cs - NUnit Test Cases for testing the
3 // OdbcParameterCollection class
5 // Sureshkumar T (TSureshkumar@novell.com)
6 // Amit Biswas (amit@amitbiswas.com)
8 // Copyright (c) 2004 Novell Inc., and the individuals listed
9 // on the ChangeLog entries.
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:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
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.
34 using System.Data.Odbc;
36 using NUnit.Framework;
38 namespace MonoTests.System.Data.Odbc
42 public class OdbcParameterCollectionTest
45 /// This tests whether the value is trimmed to the
46 /// given length while passing parameters
49 public void ParameterLengthTrimTest ()
51 IDbConnection conn = ConnectionManager.Singleton.Connection;
53 ConnectionManager.Singleton.OpenConnection ();
54 OdbcCommand cmd = (OdbcCommand) conn.CreateCommand ();
55 cmd.CommandType = CommandType.Text;
56 cmd.CommandText = "SELECT count(*) FROM employee WHERE fname=?";
58 OdbcParameter param = cmd.Parameters.Add("@fname", OdbcType.Text, 15);
59 param.Value = DateTime.Now.ToString ();
60 Assert.AreEqual (15, param.Size, "#1");
61 Convert.ToInt32(cmd.ExecuteScalar());
63 ConnectionManager.Singleton.CloseConnection ();
69 public void InsertTest ()
71 IDbConnection conn = ConnectionManager.Singleton.Connection;
73 ConnectionManager.Singleton.OpenConnection ();
74 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
75 OdbcCmd.CommandType = CommandType.Text;
76 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
78 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
79 OdbcParameter p2Age = new OdbcParameter (); //not initialized and not yet added
80 OdbcParameter p3Tmp = new OdbcParameter ("p3", "abc"); //not added
82 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
83 OdbcCmd.Parameters.Insert (1, p2Age); //Inserting the second parameter
84 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection should contain 2 parameters");
86 //inserting at upper boundary
87 OdbcCmd.Parameters.Insert (OdbcCmd.Parameters.Count, p3Tmp); //Inserting the third parameter, with name and value at index = count
88 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#3 The collection should contain 2 parameters");
90 //check the inserted positions
91 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"), "#4 The first parameter must be at index 0");
92 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#5 The inserted parameter p2Age must be at index 1");
93 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p3Tmp), "#6 The inserted parameter p3Tmp must be at index 2");
94 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf ("p3"), "#7 The inserted parameter p3 must be at index 2");
95 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("non-existing-parameter"), "#8 Non-existing parameters should return -1");
97 //check for default names and default values
98 Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#9 Parameters inserted without any name must get a default name");
99 Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#10 Parameters inserted without any value must have null value");
101 Assert.AreEqual ("p3", OdbcCmd.Parameters[2].ParameterName, "#11 Parameters inserted without any name must get a default name");
102 Assert.AreEqual ("abc", OdbcCmd.Parameters[2].Value, "#12 Parameters inserted without any value must have null value");
104 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#13 Parameters with null value must be of type NVarChar");
105 Assert.AreEqual (OdbcType.Text,OdbcCmd.Parameters[0].OdbcType, "#14 Parameter at index 0 is of type Text");
107 ConnectionManager.Singleton.CloseConnection ();
112 /// Inserting parameters in between the collection should not
113 /// overwrite the existing parameters
116 public void InsertNoOverwriteTest ()
118 IDbConnection conn = ConnectionManager.Singleton.Connection;
120 ConnectionManager.Singleton.OpenConnection ();
121 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
122 OdbcCmd.CommandType = CommandType.Text;
123 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
125 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
126 OdbcParameter p2Age = OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
127 OdbcParameter p3Tmp = OdbcCmd.Parameters.Add ("@Tmp", OdbcType.Text, 15);
128 OdbcParameter p4Tmp = new OdbcParameter ();
130 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
131 OdbcCmd.Parameters.Insert (1, p4Tmp); //Inserting at index 1
132 Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#2 Collection should contain 4 parameters");
134 //Existing parameters should not be overwritten
135 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname), "#3 The parameter at index 0 should not change");
136 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p4Tmp), "#4 The inserted parameter should be at index 1");
137 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p2Age), "#5 The parameter at index 1 should be at index 2 after inserting");
138 Assert.AreEqual (3, OdbcCmd.Parameters.IndexOf (p3Tmp), "#6 The parameter at index 2 should be at index 3 after inserting");
139 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("non-existing-parameter"), "#7 Non-existing parameters should return -1");
141 //check for default names and default values
142 Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#8 Parameters inserted without any name must get a default name");
143 Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#9 Parameters inserted without any value must have null value");
145 ConnectionManager.Singleton.CloseConnection ();
150 public void InsertNullTest ()
152 IDbConnection conn = ConnectionManager.Singleton.Connection;
154 ConnectionManager.Singleton.OpenConnection ();
155 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
156 OdbcCmd.CommandType = CommandType.Text;
157 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
159 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
161 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
163 OdbcCmd.Parameters.Insert (1, null);
164 } catch (ArgumentNullException) {
165 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter after Insert failed");
168 Assert.Fail ("Expected exception ArgumentNullException was not thrown");
171 ConnectionManager.Singleton.CloseConnection ();
176 public void InsertEmptyTest ()
178 IDbConnection conn = ConnectionManager.Singleton.Connection;
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=?";
185 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
187 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
189 OdbcCmd.Parameters.Insert (1, "");
190 } catch (InvalidCastException) {
191 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter after Insert failed");
194 Assert.Fail ("Expected exception InvalidCastException was not thrown");
197 ConnectionManager.Singleton.CloseConnection ();
202 public void InsertAlreadyContainedParameterTest ()
204 IDbConnection conn = ConnectionManager.Singleton.Connection;
206 ConnectionManager.Singleton.OpenConnection ();
207 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
208 OdbcCmd.CommandType = CommandType.Text;
209 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
211 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
212 OdbcParameter p2Age = new OdbcParameter (); //not initialized and not yet added
214 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
215 OdbcCmd.Parameters.Insert (1, p2Age);
216 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain 2 parameters");
218 OdbcCmd.Parameters.Insert (2, p2Age); //p2Age is already contained
219 } catch (ArgumentException) {
220 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#3 The collection must contain 2 parameters after Insert failed");
223 Assert.Fail ("Expected exception ArgumentException not thrown");
225 ConnectionManager.Singleton.CloseConnection ();
230 public void InsertArgumentGreaterThanCountTest ()
232 IDbConnection conn = ConnectionManager.Singleton.Connection;
234 ConnectionManager.Singleton.OpenConnection ();
235 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
236 OdbcCmd.CommandType = CommandType.Text;
237 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
238 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
239 OdbcParameter p2Age = new OdbcParameter ();
241 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
243 OdbcCmd.Parameters.Insert (OdbcCmd.Parameters.Count + 1, p2Age); //Inserting with wrong index
244 } catch (ArgumentOutOfRangeException) {
245 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
248 Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
250 ConnectionManager.Singleton.CloseConnection ();
256 public void InsertNegativeArgumentTest ()
258 IDbConnection conn = ConnectionManager.Singleton.Connection;
260 ConnectionManager.Singleton.OpenConnection ();
261 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
262 OdbcCmd.CommandType = CommandType.Text;
263 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
264 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
265 OdbcParameter p2Age = new OdbcParameter ();
267 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
269 OdbcCmd.Parameters.Insert (-3, p2Age); //Insert with negative index
270 } catch (ArgumentOutOfRangeException) {
271 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
274 Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
276 ConnectionManager.Singleton.CloseConnection ();
281 public void InsertNonOdbcParameterTest ()
283 IDbConnection conn = ConnectionManager.Singleton.Connection;
285 ConnectionManager.Singleton.OpenConnection ();
286 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
287 OdbcCmd.CommandType = CommandType.Text;
288 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
290 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
292 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
294 OdbcCmd.Parameters.Insert (1, 4);
295 } catch (InvalidCastException) {
296 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
299 Assert.Fail ("Expected exception InvalidCastException was not thrown");
302 ConnectionManager.Singleton.CloseConnection ();
308 public void AddRangeTest ()
310 IDbConnection conn = ConnectionManager.Singleton.Connection;
312 ConnectionManager.Singleton.OpenConnection ();
313 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
314 OdbcCmd.CommandType = CommandType.Text;
315 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
316 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
317 OdbcParameter p2Age = new OdbcParameter (); //not initialized and not yet added
318 OdbcParameter p3Tmp = new OdbcParameter (); //not initialized and not yet added
319 OdbcParameter p4Tmp = new OdbcParameter (); //not initialized and not yet added
320 OdbcParameter p5Tmp = new OdbcParameter (); //not initialized and not yet added
322 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
323 OdbcParameter [] paramArray = new OdbcParameter [4];
324 paramArray [0] = p2Age;
325 paramArray [1] = p3Tmp;
326 paramArray [2] = p4Tmp;
327 paramArray [3] = p5Tmp;
328 OdbcCmd.Parameters.AddRange (paramArray);
329 Assert.AreEqual (5, OdbcCmd.Parameters.Count, "#2 The array elements are not added");
330 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#3 The first element must be added after the last parameter");
331 Assert.AreEqual (4, OdbcCmd.Parameters.IndexOf (p5Tmp), "#4 Not all elements are added");
332 Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#5 Parameters added without any name must get a default name");
333 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#6 Parameters with null value must be of type NVarChar");
335 ConnectionManager.Singleton.CloseConnection ();
340 //If a parameter in the range is already contained, all the parameters before it are added and
341 //all the parameters after it are rejected
344 public void AddRangeParameterAlreadyContainedTest ()
346 IDbConnection conn = ConnectionManager.Singleton.Connection;
348 ConnectionManager.Singleton.OpenConnection ();
349 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
350 OdbcCmd.CommandType = CommandType.Text;
351 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
352 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
353 OdbcParameter p2Age = new OdbcParameter ();
354 OdbcParameter p3Tmp = new OdbcParameter ();
356 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
357 OdbcParameter [] paramArray = new OdbcParameter [3];
358 paramArray [0] = p2Age;
359 paramArray [1] = p1Lname; //p1Lname is already contained
360 paramArray [2] = p3Tmp;
362 OdbcCmd.Parameters.AddRange (paramArray);
363 } catch (ArgumentException){
364 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain excatly 2 elements after AddRange failed for the third element");
367 Assert.Fail ("Expected Exception ArgumentException not thrown");
369 ConnectionManager.Singleton.CloseConnection ();
374 //If a parameter in the range is null, all the elements in the range are rejected
377 public void AddRangeArgumentNullExceptionTest ()
379 IDbConnection conn = ConnectionManager.Singleton.Connection;
381 ConnectionManager.Singleton.OpenConnection ();
382 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
383 OdbcCmd.CommandType = CommandType.Text;
384 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
385 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
386 OdbcParameter p2Age = new OdbcParameter ();
387 OdbcParameter p3Tmp = new OdbcParameter ();
389 OdbcParameter [] paramArray = new OdbcParameter [3];
390 paramArray [0] = p2Age;
391 paramArray [1] = p3Tmp;
392 paramArray [2] = null;
393 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
395 OdbcCmd.Parameters.AddRange (paramArray);
396 } catch (ArgumentNullException){
397 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 If any of the parameters in the range is null, none of them should be added");
400 Assert.Fail ("Expected Exception ArgumentNullException not thrown");
402 ConnectionManager.Singleton.CloseConnection ();
407 public void AddRangeParameterContainedInAnotherCollTest ()
409 IDbConnection conn = ConnectionManager.Singleton.Connection;
411 ConnectionManager.Singleton.OpenConnection ();
412 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
413 OdbcCmd.CommandType = CommandType.Text;
414 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
416 OdbcCommand OdbcCmd2 = (OdbcCommand) conn.CreateCommand ();
417 OdbcCmd2.CommandType = CommandType.Text;
418 OdbcCmd2.CommandText = "SELECT lname FROM employee WHERE fname=? AND age=?";
420 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
421 OdbcParameter p2Age = new OdbcParameter ();
422 OdbcParameter p3Tmp = new OdbcParameter ();
424 OdbcParameter [] paramArray = new OdbcParameter [3];
425 paramArray [0] = p2Age;
426 paramArray [1] = p1Lname; //p1Lname is already contained in Odbccmd
427 paramArray [2] = p3Tmp;
428 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the parameter collection of OdbcCmd should contain only 1 parameter");
429 Assert.AreEqual (0, OdbcCmd2.Parameters.Count, "#2 Initialization error, the parameter collection of OdbcCmd2 should not contain any parameters");
431 OdbcCmd2.Parameters.AddRange (paramArray);
432 } catch (ArgumentException) {
433 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The parameter collection of OdbcCmd should not change");
434 Assert.AreEqual (1, OdbcCmd2.Parameters.Count, "#4 All the elements before the invalid element must be added to the collection of OdbcCmd2");
437 Assert.Fail ("Expected Exception ArgumentException not thrown");
439 ConnectionManager.Singleton.CloseConnection ();
444 public void AddRangeMultiDimensionalArrayTest ()
446 IDbConnection conn = ConnectionManager.Singleton.Connection;
448 ConnectionManager.Singleton.OpenConnection ();
449 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
450 OdbcCmd.CommandType = CommandType.Text;
451 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
452 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
453 OdbcParameter p2Age = new OdbcParameter ();
454 OdbcParameter p3Tmp = new OdbcParameter ();
455 OdbcParameter p4Tmp = new OdbcParameter ();
456 OdbcParameter p5Tmp = new OdbcParameter ();
458 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
459 OdbcParameter [,] paramArray = new OdbcParameter [2, 2];
460 paramArray [0, 0] = p2Age;
461 paramArray [0, 1] = p3Tmp;
462 paramArray [1, 0] = p4Tmp;
463 paramArray [1, 1] = p5Tmp;
464 OdbcCmd.Parameters.AddRange (paramArray);
465 Assert.AreEqual (5, OdbcCmd.Parameters.Count, "#2 Not all four parameters of the 2x2 Array are added");
466 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#3 The first element must be added after the last parameter");
467 Assert.AreEqual (4, OdbcCmd.Parameters.IndexOf (p5Tmp), "#4 Not all elements are added");
468 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[4].OdbcType, "#5 Parameters with null value must be of type NVarChar");
470 ConnectionManager.Singleton.CloseConnection ();
475 public void AddRangeArrayValuesArgumentNullExceptionTest ()
477 IDbConnection conn = ConnectionManager.Singleton.Connection;
479 ConnectionManager.Singleton.OpenConnection ();
480 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
481 OdbcCmd.CommandType = CommandType.Text;
482 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
483 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
484 OdbcParameter p2Age = new OdbcParameter ();
485 OdbcParameter p3Tmp = new OdbcParameter ();
486 OdbcParameter p5Tmp = new OdbcParameter ();
488 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
489 OdbcParameter [,] paramArray = new OdbcParameter [2, 2];
490 paramArray [0, 0] = p2Age;
491 paramArray [0, 1] = p3Tmp;
492 paramArray [1, 0] = null;
493 paramArray [1, 1] = p5Tmp;
495 OdbcCmd.Parameters.AddRange (paramArray);
496 } catch (ArgumentNullException) {
497 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 None of the elememts must be added if any one of them is null");
500 Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
502 ConnectionManager.Singleton.CloseConnection ();
508 //Tests all the three overloads of Contains
511 public void ContainsTest ()
513 IDbConnection conn = ConnectionManager.Singleton.Connection;
515 ConnectionManager.Singleton.OpenConnection ();
516 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
517 OdbcCmd.CommandType = CommandType.Text;
518 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
519 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
520 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
521 OdbcParameter p3Tmp = new OdbcParameter ();
522 OdbcCmd.Parameters.Insert (2, p3Tmp);
524 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#1 Not all parameters are added");
525 Assert.IsTrue (OdbcCmd.Parameters.Contains (p1Lname), "#2 Contains failed for OdbcParameter value");
526 Assert.IsTrue (OdbcCmd.Parameters.Contains ("@age"), "#3 Contains failed for string value");
527 Assert.IsTrue (OdbcCmd.Parameters.Contains (p3Tmp), "#4 Contains failed for object value");
528 Assert.IsFalse (OdbcCmd.Parameters.Contains (null), "#5 Contains must return false for null value");
529 Assert.IsFalse (OdbcCmd.Parameters.Contains (""), "#6 Contains must return false for empty string");
530 Assert.IsFalse (OdbcCmd.Parameters.Contains ((Object)null), "#6 Contains must return false for empty string");
531 Assert.IsFalse (OdbcCmd.Parameters.Contains ((String)null), "#6 Contains must return false for empty string");
533 ConnectionManager.Singleton.CloseConnection ();
538 public void ContainsNonOdbcParameterTest ()
540 IDbConnection conn = ConnectionManager.Singleton.Connection;
542 ConnectionManager.Singleton.OpenConnection ();
543 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
544 OdbcCmd.CommandType = CommandType.Text;
545 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
546 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
548 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 The collection must contain only one parameter");
550 Assert.IsFalse (OdbcCmd.Parameters.Contains (4), "#2 Contains must return false for non-odbcParameter arguments");
551 } catch (InvalidCastException) {
552 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The collection must contain only one parameter");
555 Assert.Fail ("Expected Exception InvalidCastException not thrown");
558 ConnectionManager.Singleton.CloseConnection ();
563 public void ContainsCaseSensitivityTest ()
565 IDbConnection conn = ConnectionManager.Singleton.Connection;
567 ConnectionManager.Singleton.OpenConnection ();
568 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
569 OdbcCmd.CommandType = CommandType.Text;
570 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
572 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
574 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
576 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@lname"), "#2 Case sensitivity failed for Contains, should be case insensitive");
577 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@LNAME"), "#3 Case sensitivity failed for Contains, should be case insensitive");
578 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@LnAmE"), "#4 Case sensitivity failed for Contains, should be case insensitive");
580 ConnectionManager.Singleton.CloseConnection ();
585 public void ContainsNotMineTest ()
587 IDbConnection conn = ConnectionManager.Singleton.Connection;
589 ConnectionManager.Singleton.OpenConnection ();
590 OdbcCommand OdbcCmd1 = (OdbcCommand) conn.CreateCommand ();
591 OdbcCommand OdbcCmd2 = (OdbcCommand) conn.CreateCommand ();
592 OdbcCmd1.CommandType = CommandType.Text;
593 OdbcCmd1.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
594 OdbcCmd2.CommandType = CommandType.Text;
595 OdbcCmd2.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
597 OdbcParameter p1 = OdbcCmd1.Parameters.Add ("@lname", OdbcType.Text, 15);
598 OdbcParameter p2 = OdbcCmd2.Parameters.Add ("@lname", OdbcType.Text, 15);
600 Assert.IsTrue (OdbcCmd1.Parameters.Contains (p1));
601 Assert.IsFalse (OdbcCmd1.Parameters.Contains (p2));
603 ConnectionManager.Singleton.CloseConnection ();
608 public void IndexOfTest ()
610 IDbConnection conn = ConnectionManager.Singleton.Connection;
612 ConnectionManager.Singleton.OpenConnection ();
613 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
614 OdbcCmd.CommandType = CommandType.Text;
615 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
616 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
617 OdbcParameter p2Age = OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
618 OdbcParameter p3Tmp = new OdbcParameter ();
619 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
621 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname), "#1 first parameter not with index 0");
622 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#2 second parameter not with index 1");
623 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (p3Tmp), "#3 non-existing parameter should return -1");
624 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#4 null value should return -1");
625 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#5 Empty string parameter should return -1");
626 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((string)null), "#6 Null string parameter should return -1");
627 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("foo"), "#7 non-existing string parameter should return -1");
628 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ((Object)p2Age), "#8 second parameter passed as Object did not return index 1");
629 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((Object)p3Tmp), "#9 non-existing parameter passed as Object did not return index -1");
630 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((Object)null), "#10 null parameter passed as Object should return index -1");
633 ConnectionManager.Singleton.CloseConnection ();
638 public void IndexOfCaseSensitivityTest ()
640 IDbConnection conn = ConnectionManager.Singleton.Connection;
642 ConnectionManager.Singleton.OpenConnection ();
643 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
644 OdbcCmd.CommandType = CommandType.Text;
645 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
646 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
647 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@AGE", OdbcType.Int, 2);
648 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
650 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"), "#2 Case sensitivity failed for IndexOf, should be case insensitive");
651 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@LNAME"), "#3 Case sensitivity failed for IndexOf, should be case insensitive");
652 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@AGE"), "#4 Case sensitivity failed for IndexOf, should be case insensitive");
653 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@age"), "#5 Case sensitivity failed for IndexOf, should be case insensitive");
655 ConnectionManager.Singleton.CloseConnection ();
660 public void IndexOfNonOdbcParameterTest ()
662 IDbConnection conn = ConnectionManager.Singleton.Connection;
664 ConnectionManager.Singleton.OpenConnection ();
665 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
666 OdbcCmd.CommandType = CommandType.Text;
667 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
668 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
670 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 The collection must contain only one parameter");
672 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (4), "#2 IndexOf must return -1 for non-odbcParameter arguments");
673 } catch (InvalidCastException) {
674 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The collection must contain only one parameter");
677 Assert.Fail ("Expected Exception InvalidCastException not thrown");
680 ConnectionManager.Singleton.CloseConnection ();
685 public void CopyToTest ()
687 IDbConnection conn = ConnectionManager.Singleton.Connection;
689 ConnectionManager.Singleton.OpenConnection ();
690 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
691 OdbcCmd.CommandType = CommandType.Text;
692 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
693 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
694 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
696 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
697 OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
699 OdbcCmd.Parameters.CopyTo (DestinationParamArray, 1); //starting at 1 instead of 0
701 Assert.AreEqual (4, DestinationParamArray.Length, "#2 The array length should not change");
702 Assert.AreEqual ("@lname", DestinationParamArray [1].ParameterName, "#3 The first parameter must be copied to array at index 1");
703 Assert.AreEqual ("@age", DestinationParamArray [2].ParameterName, "#4 The second parameter must be copied to array at index 2");
704 Assert.AreEqual (null, DestinationParamArray [0], "#5 The remaining elements must remain un-initialized");
705 Assert.AreEqual (null, DestinationParamArray [3], "#6 The remaining elements must remain un-initialized");
707 ConnectionManager.Singleton.CloseConnection ();
712 public void CopyToArgumentExceptionTest ()
714 IDbConnection conn = ConnectionManager.Singleton.Connection;
716 ConnectionManager.Singleton.OpenConnection ();
717 OdbcCommand OdbcCmd = (OdbcCommand) 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 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
723 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
724 OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
726 OdbcCmd.Parameters.CopyTo (DestinationParamArray, 3); //starting at 3, thus the second element will be at index 4
727 } catch (ArgumentException) {
728 Assert.AreEqual (null, DestinationParamArray [0], "#2 The DestinationParamArray must remain un-initialized");
729 Assert.AreEqual (null, DestinationParamArray [1], "#3 The DestinationParamArray must remain un-initialized");
730 Assert.AreEqual (null, DestinationParamArray [2], "#4 The DestinationParamArray must remain un-initialized");
731 Assert.AreEqual (null, DestinationParamArray [3], "#5 The DestinationParamArray must remain un-initialized");
734 Assert.Fail ("Expected Exception ArgumentException not thrown");
736 ConnectionManager.Singleton.CloseConnection ();
741 public void CopyToMultiDimensionalArrayTest ()
743 IDbConnection conn = ConnectionManager.Singleton.Connection;
745 ConnectionManager.Singleton.OpenConnection ();
746 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
747 OdbcCmd.CommandType = CommandType.Text;
748 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
749 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
750 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
752 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
753 OdbcParameter [,] DestinationParamArray = new OdbcParameter [2, 4];
756 OdbcCmd.Parameters.CopyTo (DestinationParamArray, 1); //DestinationParamArray is multi Dimensional
757 } catch (ArgumentException) {
758 Assert.AreEqual (null, DestinationParamArray [0, 0], "#2 The DestinationParamArray must remain un-initialized");
759 Assert.AreEqual (null, DestinationParamArray [0, 1], "#3 The DestinationParamArray must remain un-initialized");
760 Assert.AreEqual (null, DestinationParamArray [1, 2], "#4 The DestinationParamArray must remain un-initialized");
761 Assert.AreEqual (null, DestinationParamArray [1, 3], "#5 The DestinationParamArray must remain un-initialized");
764 Assert.Fail ("Expected Exception ArgumentException not thrown");
766 ConnectionManager.Singleton.CloseConnection ();
771 public void CopyToLowerBoundCheckTest ()
773 IDbConnection conn = ConnectionManager.Singleton.Connection;
775 ConnectionManager.Singleton.OpenConnection ();
776 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
777 OdbcCmd.CommandType = CommandType.Text;
778 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
779 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
780 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
782 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
783 OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
785 OdbcCmd.Parameters.CopyTo (DestinationParamArray, -1); //index must be >= 0
786 } catch (ArgumentOutOfRangeException) {
787 Assert.AreEqual (null, DestinationParamArray [0], "#2 The DestinationParamArray must remain un-initialized");
788 Assert.AreEqual (null, DestinationParamArray [1], "#3 The DestinationParamArray must remain un-initialized");
789 Assert.AreEqual (null, DestinationParamArray [2], "#4 The DestinationParamArray must remain un-initialized");
790 Assert.AreEqual (null, DestinationParamArray [3], "#5 The DestinationParamArray must remain un-initialized");
793 Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
795 ConnectionManager.Singleton.CloseConnection ();
800 public void DuplicateParameterNameTest ()
802 IDbConnection conn = ConnectionManager.Singleton.Connection;
804 ConnectionManager.Singleton.OpenConnection ();
805 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
806 OdbcCmd.CommandType = CommandType.Text;
807 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
809 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
811 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
812 OdbcParameter p2Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
813 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 Collection should contain 2 parameters");
815 //Checking IndexOf (string) overload
816 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"));
818 //Checking IndexOf (OdbcParameter) overload
819 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname));
820 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Lname));
822 //Checking IndexOf (object) overload
823 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ((object) p1Lname));
824 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ((object) p2Lname));
826 ConnectionManager.Singleton.CloseConnection ();
831 public void RemoveTest ()
833 IDbConnection conn = ConnectionManager.Singleton.Connection;
835 ConnectionManager.Singleton.OpenConnection ();
836 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
837 OdbcCmd.CommandType = CommandType.Text;
838 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
840 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
842 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
843 OdbcCmd.Parameters.Remove (p1Lname);
844 Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#2 Collection should not contain any parameters");
846 ConnectionManager.Singleton.CloseConnection ();
851 public void RemoveNullTest ()
853 IDbConnection conn = ConnectionManager.Singleton.Connection;
855 ConnectionManager.Singleton.OpenConnection ();
856 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
857 OdbcCmd.CommandType = CommandType.Text;
858 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
860 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
862 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
864 OdbcCmd.Parameters.Remove (null);
865 } catch (ArgumentNullException) {
866 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
869 Assert.Fail ("Expected exception ArgumentNullException was not thrown");
871 ConnectionManager.Singleton.CloseConnection ();
876 public void RemoveEmptyTest ()
878 IDbConnection conn = ConnectionManager.Singleton.Connection;
880 ConnectionManager.Singleton.OpenConnection ();
881 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
882 OdbcCmd.CommandType = CommandType.Text;
883 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
885 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
887 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
889 OdbcCmd.Parameters.Remove ("");
890 } catch (InvalidCastException) {
891 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
894 Assert.Fail ("Expected exception InvalidCastException was not thrown");
896 ConnectionManager.Singleton.CloseConnection ();
901 public void RemoveNonOdbcParameterTest ()
903 IDbConnection conn = ConnectionManager.Singleton.Connection;
905 ConnectionManager.Singleton.OpenConnection ();
906 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
907 OdbcCmd.CommandType = CommandType.Text;
908 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
910 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
912 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
914 OdbcCmd.Parameters.Remove (4);
915 } catch (InvalidCastException) {
916 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
919 Assert.Fail ("Expected exception InvalidCastException was not thrown");
921 ConnectionManager.Singleton.CloseConnection ();
926 public void RemoveNonExistingParameterTest ()
928 IDbConnection conn = ConnectionManager.Singleton.Connection;
930 ConnectionManager.Singleton.OpenConnection ();
931 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
932 OdbcCmd.CommandType = CommandType.Text;
933 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
935 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
936 /*OdbcParameter p2Age = new OdbcParameter ();*/
938 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
939 OdbcCmd.Parameters.Remove (p1Lname);
940 Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#2 Collection should not contain any parameters");
942 OdbcCmd.Parameters.Remove (p1Lname);
943 } catch (ArgumentException) {
944 Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#3 The collection should not contain any parameters");
947 Assert.Fail ("Expected exception ArgumentException not thrown");
949 ConnectionManager.Singleton.CloseConnection ();
954 public void RemoveParameterContainedInAnotherCollTest ()
956 IDbConnection conn = ConnectionManager.Singleton.Connection;
958 ConnectionManager.Singleton.OpenConnection ();
959 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
960 OdbcCmd.CommandType = CommandType.Text;
961 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
963 OdbcCommand OdbcCmd2 = (OdbcCommand) conn.CreateCommand ();
964 OdbcCmd2.CommandType = CommandType.Text;
965 OdbcCmd2.CommandText = "SELECT lname FROM employee WHERE fname=? AND age=?";
967 OdbcParameter p1 = OdbcCmd.Parameters.Add ("@p1", OdbcType.Text, 15);
968 /*OdbcParameter p2 = */OdbcCmd.Parameters.Add ("@p2", OdbcType.Text, 15);
970 /*OdbcParameter p3 = */OdbcCmd2.Parameters.Add ("@p3", OdbcType.Text, 15);
971 /*OdbcParameter p4 = */OdbcCmd2.Parameters.Add ("@p4", OdbcType.Text, 15);
973 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#5 The parameter collection of OdbcCmd should contain 2 parameters");
974 Assert.AreEqual (2, OdbcCmd2.Parameters.Count, "#6 The parameter collection of OdbcCmd2 should contain 2 parameters");
976 OdbcCmd2.Parameters.Remove (p1);
977 } catch (ArgumentException) {
978 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#5 The parameter collection of OdbcCmd should contain 2 parameters");
979 Assert.AreEqual (2, OdbcCmd2.Parameters.Count, "#6 The parameter collection of OdbcCmd2 should contain 2 parameters");
982 Assert.Fail ("Expected Exception ArgumentException not thrown");
984 ConnectionManager.Singleton.CloseConnection ();
989 public void RemoveAtTest ()
991 IDbConnection conn = ConnectionManager.Singleton.Connection;
993 ConnectionManager.Singleton.OpenConnection ();
994 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
995 OdbcCmd.CommandType = CommandType.Text;
996 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
998 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
999 OdbcParameter p2Age = OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
1000 OdbcParameter p3Tmp = OdbcCmd.Parameters.Add ("@p3Tmp", OdbcType.Text, 15);
1001 OdbcParameter p4Tmp = OdbcCmd.Parameters.Add ("@p4Tmp", OdbcType.Text, 15);
1003 Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1005 Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#2 the collection does not contain p1Lname");
1006 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#3 p1Lname is not at index 0");
1008 //remove the first parameter
1009 OdbcCmd.Parameters.RemoveAt (0);
1010 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#4 Collection should contain only 3 parameters");
1011 Assert.AreEqual (false, OdbcCmd.Parameters.Contains(p1Lname), "#5 the collection should not contain p1Lname");
1012 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf(p1Lname), "#6 the collection should not contain p1Lname");
1013 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p2Age), "#7 p2Age should now be at index 0");
1014 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf(p3Tmp), "#8 p3Tmp should now be at index 1");
1015 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf(p4Tmp), "#9 p4Tmp should now be at index 2");
1017 //remove the last parameter
1018 OdbcCmd.Parameters.RemoveAt (OdbcCmd.Parameters.Count-1);
1019 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#10 Collection should contain only 2 parameters");
1020 Assert.AreEqual (false, OdbcCmd.Parameters.Contains(p4Tmp), "#11 the collection should not contain p4Tmp");
1021 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf(p4Tmp), "#12 the collection should not contain p4Tmp");
1022 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p2Age), "#13 p2Age should be at index 0");
1023 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf(p3Tmp), "#14 p3Tmp should be at index 1");
1025 ConnectionManager.Singleton.CloseConnection ();
1030 public void RemoveAtOutOfRangeIndexTest ()
1032 IDbConnection conn = ConnectionManager.Singleton.Connection;
1034 ConnectionManager.Singleton.OpenConnection ();
1035 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
1036 OdbcCmd.CommandType = CommandType.Text;
1037 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1039 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1041 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1043 OdbcCmd.Parameters.RemoveAt (9);
1044 } catch (IndexOutOfRangeException) {
1045 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
1046 Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
1047 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
1050 Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
1052 ConnectionManager.Singleton.CloseConnection ();
1057 public void RemoveAtNegativeIndexTest ()
1059 IDbConnection conn = ConnectionManager.Singleton.Connection;
1061 ConnectionManager.Singleton.OpenConnection ();
1062 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
1063 OdbcCmd.CommandType = CommandType.Text;
1064 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1066 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1068 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1070 OdbcCmd.Parameters.RemoveAt (-1);
1071 } catch (IndexOutOfRangeException) {
1072 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
1073 Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
1074 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
1077 Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
1079 ConnectionManager.Singleton.CloseConnection ();
1084 public void RemoveAtBoundaryTest ()
1086 IDbConnection conn = ConnectionManager.Singleton.Connection;
1088 ConnectionManager.Singleton.OpenConnection ();
1089 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
1090 OdbcCmd.CommandType = CommandType.Text;
1091 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1093 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1095 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1097 OdbcCmd.Parameters.RemoveAt (OdbcCmd.Parameters.Count);
1098 } catch (IndexOutOfRangeException) {
1099 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
1100 Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
1101 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
1104 Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
1106 ConnectionManager.Singleton.CloseConnection ();
1111 public void AddWithValueTest ()
1113 IDbConnection conn = ConnectionManager.Singleton.Connection;
1115 ConnectionManager.Singleton.OpenConnection ();
1116 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
1117 OdbcCmd.CommandType = CommandType.Text;
1118 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1120 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1121 OdbcParameter rt = null; //to check return type
1122 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1124 rt = OdbcCmd.Parameters.AddWithValue ("@P2", "Param2");
1125 Assert.AreEqual (typeof(OdbcParameter), rt.GetType(), "#1a AddWithValue didnt retuen type OdbcParameter");
1126 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 AddWithValue failed for valid parameter name and value");
1127 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@P2"), "#3 collection does not contain @P2");
1128 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@P2"), "#4 Index of added parameter must be 1");
1129 Assert.AreEqual ("Param2", OdbcCmd.Parameters["@P2"].Value, "#5 Value of added parameter must be Param2");
1130 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#6 Parameters with null value must be of type NVarChar");
1132 OdbcCmd.Parameters.AddWithValue ("@P2", "Param2ReAdded"); //adding again
1133 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#7 AddWithValue must append at the end of the collection even for same parameter names");
1134 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@P2"), "#8 collection does not contain @P2");
1135 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@P2"), "#9 Index of @P2 must be 1");
1136 Assert.AreEqual ("Param2", OdbcCmd.Parameters["@P2"].Value, "#10 Value of added parameter must be Param2");
1137 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters["@P2"].OdbcType, "#11 Parameters with null value must be of type NVarChar");
1139 //Two different parameters with same name but at different positions ie 1 and 2
1140 Assert.AreEqual ("@P2",OdbcCmd.Parameters[1].ParameterName, "#12 The parameter at index 1 must be @P2");
1141 Assert.AreEqual ("@P2",OdbcCmd.Parameters[2].ParameterName, "#13 The parameter at index 2 must be @P2");
1143 //Confirming the parameters by checking their values
1144 Assert.AreEqual ("Param2",OdbcCmd.Parameters[1].Value, "#14The parameter at index 1 must have value Param2");
1145 Assert.AreEqual ("Param2ReAdded",OdbcCmd.Parameters[2].Value, "#15The parameter at index 2 must have value Param2ReAdded");
1147 //Testing for null values
1148 OdbcCmd.Parameters.AddWithValue (null, null);
1149 Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#16 AddWithValue must accept null parameter names and null values");
1150 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#17 AddWithValue must return false for Contains (null)");
1151 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#18 AddWithValue must return -1 for IndexOf (null)");
1152 Assert.AreEqual (null, OdbcCmd.Parameters["Parameter1"].Value, "#19 Value of added parameter must be null");
1153 Assert.AreEqual ("Parameter1",OdbcCmd.Parameters[3].ParameterName, "#20 The parameter at index 3 must be Parameter1");
1154 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[3].OdbcType, "#21 Parameters with null value must be of type NVarChar");
1156 OdbcCmd.Parameters.AddWithValue (null, null); //adding another null parameter
1157 Assert.AreEqual (5, OdbcCmd.Parameters.Count, "#22 AddWithValue must accept null parameter names and null values");
1158 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#23 AddWithValue must return false for Contains (null)");
1159 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#24 AddWithValue must return -1 for IndexOf (null)");
1160 Assert.AreEqual (null, OdbcCmd.Parameters["Parameter2"].Value, "#25 Value of added parameter must be null");
1161 Assert.AreEqual ("Parameter2",OdbcCmd.Parameters[4].ParameterName, "#26 The parameter at index 1 must be Parameter2");
1162 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[4].OdbcType, "#27 Parameters with null value must be of type NVarChar");
1164 //Testing for empty strings
1165 OdbcCmd.Parameters.AddWithValue ("", ""); //adding empty parameter
1166 Assert.AreEqual (6, OdbcCmd.Parameters.Count, "#28 AddWithValue must accept empty names and empty values");
1167 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (""), "#29 AddWithValue must return false for Contains ('')");
1168 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#30 AddWithValue must return -1 for IndexOf ('')");
1169 Assert.AreEqual ("Parameter3",OdbcCmd.Parameters[5].ParameterName, "#31 The parameter at index 5 must be Parameter3");
1170 Assert.AreEqual ("",OdbcCmd.Parameters[5].Value, "#32 The parameter at index 5 must have value as empty string");
1171 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[5].OdbcType, "#33 Parameters with null value must be of type NVarChar");
1173 OdbcCmd.Parameters.AddWithValue ("", ""); //adding another empty parameter
1174 Assert.AreEqual (7, OdbcCmd.Parameters.Count, "#34 AddWithValue must accept empty names and empty values");
1175 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (""), "#35 AddWithValue must return false for Contains ('')");
1176 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#36 AddWithValue must return -1 for IndexOf ('')");
1177 Assert.AreEqual ("Parameter4",OdbcCmd.Parameters[6].ParameterName, "#37 The parameter at index 6 must have name as Parameter4");
1178 Assert.AreEqual ("",OdbcCmd.Parameters[6].Value, "#38 The parameter at index 6 must have value as empty string");
1179 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[6].OdbcType, "#39 Parameters with null value must be of type NVarChar");
1181 OdbcCmd.Parameters.AddWithValue ("foo", null);
1182 Assert.AreEqual (8, OdbcCmd.Parameters.Count, "#40 AddWithValue must accept string names and null values");
1183 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("foo"), "#41 AddWithValue must return true for Contains ('foo')");
1184 Assert.AreEqual (7, OdbcCmd.Parameters.IndexOf ("foo"), "#42 AddWithValue must return 7 for IndexOf ('foo')");
1185 Assert.AreEqual ("foo",OdbcCmd.Parameters[7].ParameterName, "#43 The parameter at index 7 must have name foo");
1186 Assert.AreEqual (null,OdbcCmd.Parameters[7].Value, "#44 The parameter at index 7 must have value as null");
1187 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[7].OdbcType, "#45 Parameters with null value must be of type NVarChar");
1189 OdbcCmd.Parameters.AddWithValue (null, 2);
1190 Assert.AreEqual (9, OdbcCmd.Parameters.Count, "#46 AddWithValue must accept empty names and empty values");
1191 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#47 AddWithValue must return false for Contains (null)");
1192 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#48 AddWithValue must return -1 for IndexOf ('')");
1193 Assert.AreEqual ("Parameter5",OdbcCmd.Parameters[8].ParameterName, "#49 The parameter at index 8 must have name as Parameter5");
1194 Assert.AreEqual (2,OdbcCmd.Parameters[8].Value, "#50 The parameter at index 8 must have value as 2");
1195 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[8].OdbcType, "#51 Parameter must be of type NVarChar");
1198 ConnectionManager.Singleton.CloseConnection ();
1203 public void DefaultNamesAndValuesTest ()
1205 IDbConnection conn = ConnectionManager.Singleton.Connection;
1207 ConnectionManager.Singleton.OpenConnection ();
1208 OdbcCommand OdbcCmd = (OdbcCommand) conn.CreateCommand ();
1209 OdbcCmd.CommandType = CommandType.Text;
1210 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1212 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1213 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1215 OdbcParameter p2Age = new OdbcParameter ();
1216 OdbcParameter p3Tmp = new OdbcParameter ();
1218 OdbcCmd.Parameters.Add (p2Age);
1219 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain 2 parameters");
1220 Assert.AreEqual (true, OdbcCmd.Parameters.Contains (p2Age), "#3 Collection does not contain p2Age");
1221 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#4 Index of p2Age must be 1");
1222 Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#5 Value of added parameter must be null");
1223 Assert.AreEqual ("Parameter1",OdbcCmd.Parameters[1].ParameterName, "#6 The parameter must have a default name");
1224 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#7 Parameters with null value must be of type NVarChar");
1226 OdbcCmd.Parameters.Insert (2,p3Tmp);
1227 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#8 The collection must contain 3 parameters");
1228 Assert.AreEqual (true, OdbcCmd.Parameters.Contains (p3Tmp), "#9 Collection does not contain p3Tmp");
1229 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p3Tmp), "#10 Index of p3Tmp must be 2");
1230 Assert.AreEqual (null, OdbcCmd.Parameters[2].Value, "#11 Value of added parameter must be null");
1231 Assert.AreEqual ("Parameter2",OdbcCmd.Parameters[2].ParameterName, "#12 The parameter must have a default name");
1232 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[2].OdbcType, "#13 Parameters with null value must be of type NVarChar");
1234 ConnectionManager.Singleton.CloseConnection ();