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 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
52 ConnectionManager.Singleton.OpenConnection ();
55 OdbcCommand cmd = conn.CreateCommand ();
56 cmd.CommandType = CommandType.Text;
57 cmd.CommandText = "SELECT count(*) FROM employee WHERE fname=?";
59 OdbcParameter param = cmd.Parameters.Add("@fname", OdbcType.VarChar, 15);
60 param.Value = DateTime.Now.ToString ();
61 Assert.AreEqual (15, param.Size, "#1");
62 Assert.AreEqual (0, cmd.ExecuteScalar(), "#2");
64 ConnectionManager.Singleton.CloseConnection ();
69 public void InsertTest ()
71 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
72 ConnectionManager.Singleton.OpenConnection ();
75 OdbcCommand OdbcCmd = conn.CreateCommand ();
76 OdbcCmd.CommandType = CommandType.Text;
77 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
79 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
80 OdbcParameter p2Age = new OdbcParameter (); //not initialized and not yet added
81 OdbcParameter p3Tmp = new OdbcParameter ("p3", "abc"); //not added
83 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
84 OdbcCmd.Parameters.Insert (1, p2Age); //Inserting the second parameter
85 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection should contain 2 parameters");
87 //inserting at upper boundary
88 OdbcCmd.Parameters.Insert (OdbcCmd.Parameters.Count, p3Tmp); //Inserting the third parameter, with name and value at index = count
89 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#3 The collection should contain 2 parameters");
91 //check the inserted positions
92 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"), "#4 The first parameter must be at index 0");
93 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#5 The inserted parameter p2Age must be at index 1");
94 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p3Tmp), "#6 The inserted parameter p3Tmp must be at index 2");
95 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf ("p3"), "#7 The inserted parameter p3 must be at index 2");
96 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("non-existing-parameter"), "#8 Non-existing parameters should return -1");
98 //check for default names and default values
99 Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#9 Parameters inserted without any name must get a default name");
100 Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#10 Parameters inserted without any value must have null value");
102 Assert.AreEqual ("p3", OdbcCmd.Parameters[2].ParameterName, "#11 Parameters inserted without any name must get a default name");
103 Assert.AreEqual ("abc", OdbcCmd.Parameters[2].Value, "#12 Parameters inserted without any value must have null value");
105 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#13 Parameters with null value must be of type NVarChar");
106 Assert.AreEqual (OdbcType.Text,OdbcCmd.Parameters[0].OdbcType, "#14 Parameter at index 0 is of type Text");
108 ConnectionManager.Singleton.CloseConnection ();
113 /// Inserting parameters in between the collection should not
114 /// overwrite the existing parameters
117 public void InsertNoOverwriteTest ()
119 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
120 ConnectionManager.Singleton.OpenConnection ();
123 OdbcCommand OdbcCmd = conn.CreateCommand ();
124 OdbcCmd.CommandType = CommandType.Text;
125 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
127 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
128 OdbcParameter p2Age = OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
129 OdbcParameter p3Tmp = OdbcCmd.Parameters.Add ("@Tmp", OdbcType.Text, 15);
130 OdbcParameter p4Tmp = new OdbcParameter ();
132 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
133 OdbcCmd.Parameters.Insert (1, p4Tmp); //Inserting at index 1
134 Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#2 Collection should contain 4 parameters");
136 //Existing parameters should not be overwritten
137 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname), "#3 The parameter at index 0 should not change");
138 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p4Tmp), "#4 The inserted parameter should be at index 1");
139 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p2Age), "#5 The parameter at index 1 should be at index 2 after inserting");
140 Assert.AreEqual (3, OdbcCmd.Parameters.IndexOf (p3Tmp), "#6 The parameter at index 2 should be at index 3 after inserting");
141 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("non-existing-parameter"), "#7 Non-existing parameters should return -1");
143 //check for default names and default values
144 Assert.AreEqual ("Parameter1", OdbcCmd.Parameters[1].ParameterName, "#8 Parameters inserted without any name must get a default name");
145 Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#9 Parameters inserted without any value must have null value");
147 ConnectionManager.Singleton.CloseConnection ();
152 public void InsertNullTest ()
154 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
155 ConnectionManager.Singleton.OpenConnection ();
158 OdbcCommand OdbcCmd = conn.CreateCommand ();
159 OdbcCmd.CommandType = CommandType.Text;
160 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
162 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
164 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
166 OdbcCmd.Parameters.Insert (1, null);
167 Assert.Fail ("Expected exception ArgumentNullException was not thrown");
168 } catch (ArgumentNullException) {
169 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter after Insert failed");
172 ConnectionManager.Singleton.CloseConnection ();
177 public void InsertEmptyTest ()
179 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
180 ConnectionManager.Singleton.OpenConnection ();
183 OdbcCommand OdbcCmd = conn.CreateCommand ();
184 OdbcCmd.CommandType = CommandType.Text;
185 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
187 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
189 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
191 OdbcCmd.Parameters.Insert (1, string.Empty);
192 Assert.Fail ("Expected exception InvalidCastException was not thrown");
193 } catch (InvalidCastException) {
194 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter after Insert failed");
198 ConnectionManager.Singleton.CloseConnection ();
203 public void InsertAlreadyContainedParameterTest ()
205 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
206 ConnectionManager.Singleton.OpenConnection ();
209 OdbcCommand OdbcCmd = conn.CreateCommand ();
210 OdbcCmd.CommandType = CommandType.Text;
211 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
213 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
214 OdbcParameter p2Age = new OdbcParameter (); //not initialized and not yet added
216 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
217 OdbcCmd.Parameters.Insert (1, p2Age);
218 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain 2 parameters");
220 OdbcCmd.Parameters.Insert (2, p2Age); //p2Age is already contained
221 Assert.Fail ("Expected exception ArgumentException not thrown");
222 } catch (ArgumentException) {
223 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#3 The collection must contain 2 parameters after Insert failed");
226 ConnectionManager.Singleton.CloseConnection ();
231 public void InsertArgumentGreaterThanCountTest ()
233 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
234 ConnectionManager.Singleton.OpenConnection ();
237 OdbcCommand OdbcCmd = conn.CreateCommand ();
238 OdbcCmd.CommandType = CommandType.Text;
239 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
240 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
241 OdbcParameter p2Age = new OdbcParameter ();
243 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
245 OdbcCmd.Parameters.Insert (OdbcCmd.Parameters.Count + 1, p2Age); //Inserting with wrong index
246 Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
247 } catch (ArgumentOutOfRangeException) {
248 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
251 ConnectionManager.Singleton.CloseConnection ();
256 public void InsertNegativeArgumentTest ()
258 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
259 ConnectionManager.Singleton.OpenConnection ();
262 OdbcCommand OdbcCmd = conn.CreateCommand ();
263 OdbcCmd.CommandType = CommandType.Text;
264 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
265 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
266 OdbcParameter p2Age = new OdbcParameter ();
268 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
270 OdbcCmd.Parameters.Insert (-3, p2Age); //Insert with negative index
271 Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
272 } catch (ArgumentOutOfRangeException) {
273 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
276 ConnectionManager.Singleton.CloseConnection ();
281 public void InsertNonOdbcParameterTest ()
283 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
284 ConnectionManager.Singleton.OpenConnection ();
287 OdbcCommand OdbcCmd = conn.CreateCommand ();
288 OdbcCmd.CommandType = CommandType.Text;
289 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
291 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
293 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
295 OdbcCmd.Parameters.Insert (1, 4);
296 Assert.Fail ("Expected exception InvalidCastException was not thrown");
297 } catch (InvalidCastException) {
298 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only 1 parameter after Insert failed");
301 ConnectionManager.Singleton.CloseConnection ();
307 public void AddRangeTest ()
309 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
310 ConnectionManager.Singleton.OpenConnection ();
313 OdbcCommand OdbcCmd = 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 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
347 ConnectionManager.Singleton.OpenConnection ();
350 OdbcCommand OdbcCmd = conn.CreateCommand ();
351 OdbcCmd.CommandType = CommandType.Text;
352 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
353 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
354 OdbcParameter p2Age = new OdbcParameter ();
355 OdbcParameter p3Tmp = new OdbcParameter ();
357 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
358 OdbcParameter [] paramArray = new OdbcParameter [3];
359 paramArray [0] = p2Age;
360 paramArray [1] = p1Lname; //p1Lname is already contained
361 paramArray [2] = p3Tmp;
363 OdbcCmd.Parameters.AddRange (paramArray);
364 Assert.Fail ("Expected Exception ArgumentException not thrown");
365 } catch (ArgumentException){
366 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain excatly 2 elements after AddRange failed for the third element");
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 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
380 ConnectionManager.Singleton.OpenConnection ();
383 OdbcCommand OdbcCmd = conn.CreateCommand ();
384 OdbcCmd.CommandType = CommandType.Text;
385 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
386 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
387 OdbcParameter p2Age = new OdbcParameter ();
388 OdbcParameter p3Tmp = new OdbcParameter ();
390 OdbcParameter [] paramArray = new OdbcParameter [3];
391 paramArray [0] = p2Age;
392 paramArray [1] = p3Tmp;
393 paramArray [2] = null;
394 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
396 OdbcCmd.Parameters.AddRange (paramArray);
397 Assert.Fail ("Expected Exception ArgumentNullException not thrown");
398 } catch (ArgumentNullException){
399 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 If any of the parameters in the range is null, none of them should be added");
402 ConnectionManager.Singleton.CloseConnection ();
407 public void AddRangeParameterContainedInAnotherCollTest ()
409 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
410 ConnectionManager.Singleton.OpenConnection ();
413 OdbcCommand OdbcCmd = conn.CreateCommand ();
414 OdbcCmd.CommandType = CommandType.Text;
415 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
417 OdbcCommand OdbcCmd2 = conn.CreateCommand ();
418 OdbcCmd2.CommandType = CommandType.Text;
419 OdbcCmd2.CommandText = "SELECT lname FROM employee WHERE fname=? AND age=?";
421 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
422 OdbcParameter p2Age = new OdbcParameter ();
423 OdbcParameter p3Tmp = new OdbcParameter ();
425 OdbcParameter [] paramArray = new OdbcParameter [3];
426 paramArray [0] = p2Age;
427 paramArray [1] = p1Lname; //p1Lname is already contained in Odbccmd
428 paramArray [2] = p3Tmp;
429 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the parameter collection of OdbcCmd should contain only 1 parameter");
430 Assert.AreEqual (0, OdbcCmd2.Parameters.Count, "#2 Initialization error, the parameter collection of OdbcCmd2 should not contain any parameters");
432 OdbcCmd2.Parameters.AddRange (paramArray);
433 Assert.Fail ("Expected Exception ArgumentException not thrown");
434 } catch (ArgumentException) {
435 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The parameter collection of OdbcCmd should not change");
436 Assert.AreEqual (1, OdbcCmd2.Parameters.Count, "#4 All the elements before the invalid element must be added to the collection of OdbcCmd2");
439 ConnectionManager.Singleton.CloseConnection ();
444 public void AddRangeMultiDimensionalArrayTest ()
446 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
447 ConnectionManager.Singleton.OpenConnection ();
450 OdbcCommand OdbcCmd = conn.CreateCommand ();
451 OdbcCmd.CommandType = CommandType.Text;
452 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
453 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
454 OdbcParameter p2Age = new OdbcParameter ();
455 OdbcParameter p3Tmp = new OdbcParameter ();
456 OdbcParameter p4Tmp = new OdbcParameter ();
457 OdbcParameter p5Tmp = new OdbcParameter ();
459 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
460 OdbcParameter [,] paramArray = new OdbcParameter [2, 2];
461 paramArray [0, 0] = p2Age;
462 paramArray [0, 1] = p3Tmp;
463 paramArray [1, 0] = p4Tmp;
464 paramArray [1, 1] = p5Tmp;
465 OdbcCmd.Parameters.AddRange (paramArray);
466 Assert.AreEqual (5, OdbcCmd.Parameters.Count, "#2 Not all four parameters of the 2x2 Array are added");
467 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#3 The first element must be added after the last parameter");
468 Assert.AreEqual (4, OdbcCmd.Parameters.IndexOf (p5Tmp), "#4 Not all elements are added");
469 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[4].OdbcType, "#5 Parameters with null value must be of type NVarChar");
471 ConnectionManager.Singleton.CloseConnection ();
476 public void AddRangeArrayValuesArgumentNullExceptionTest ()
478 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
479 ConnectionManager.Singleton.OpenConnection ();
482 OdbcCommand OdbcCmd = conn.CreateCommand ();
483 OdbcCmd.CommandType = CommandType.Text;
484 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
485 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
486 OdbcParameter p2Age = new OdbcParameter ();
487 OdbcParameter p3Tmp = new OdbcParameter ();
488 OdbcParameter p5Tmp = new OdbcParameter ();
490 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
491 OdbcParameter [,] paramArray = new OdbcParameter [2, 2];
492 paramArray [0, 0] = p2Age;
493 paramArray [0, 1] = p3Tmp;
494 paramArray [1, 0] = null;
495 paramArray [1, 1] = p5Tmp;
497 OdbcCmd.Parameters.AddRange (paramArray);
498 Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
499 } catch (ArgumentNullException) {
500 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 None of the elememts must be added if any one of them is null");
503 ConnectionManager.Singleton.CloseConnection ();
508 //Tests all the three overloads of Contains
511 public void ContainsTest ()
513 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
514 ConnectionManager.Singleton.OpenConnection ();
517 OdbcCommand OdbcCmd = conn.CreateCommand ();
518 OdbcCmd.CommandType = CommandType.Text;
519 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
520 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
521 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
522 OdbcParameter p3Tmp = new OdbcParameter ();
523 OdbcCmd.Parameters.Insert (2, p3Tmp);
525 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#1 Not all parameters are added");
526 Assert.IsTrue (OdbcCmd.Parameters.Contains (p1Lname), "#2 Contains failed for OdbcParameter value");
527 Assert.IsTrue (OdbcCmd.Parameters.Contains ("@age"), "#3 Contains failed for string value");
528 Assert.IsTrue (OdbcCmd.Parameters.Contains (p3Tmp), "#4 Contains failed for object value");
529 Assert.IsFalse (OdbcCmd.Parameters.Contains (null), "#5 Contains must return false for null value");
530 Assert.IsFalse (OdbcCmd.Parameters.Contains (""), "#6 Contains must return false for empty string");
531 Assert.IsFalse (OdbcCmd.Parameters.Contains ((Object)null), "#6 Contains must return false for empty string");
532 Assert.IsFalse (OdbcCmd.Parameters.Contains ((String)null), "#6 Contains must return false for empty string");
534 ConnectionManager.Singleton.CloseConnection ();
539 public void ContainsNonOdbcParameterTest ()
541 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
542 ConnectionManager.Singleton.OpenConnection ();
545 OdbcCommand OdbcCmd = conn.CreateCommand ();
546 OdbcCmd.CommandType = CommandType.Text;
547 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
548 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
550 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 The collection must contain only one parameter");
552 Assert.IsFalse (OdbcCmd.Parameters.Contains (4), "#2 Contains must return false for non-odbcParameter arguments");
553 Assert.Fail ("Expected Exception InvalidCastException not thrown");
554 } catch (InvalidCastException) {
555 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The collection must contain only one parameter");
558 ConnectionManager.Singleton.CloseConnection ();
563 public void ContainsCaseSensitivityTest ()
565 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
566 ConnectionManager.Singleton.OpenConnection ();
569 OdbcCommand OdbcCmd = conn.CreateCommand ();
570 OdbcCmd.CommandType = CommandType.Text;
571 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
573 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
575 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
577 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@lname"), "#2 Case sensitivity failed for Contains, should be case insensitive");
578 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@LNAME"), "#3 Case sensitivity failed for Contains, should be case insensitive");
579 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@LnAmE"), "#4 Case sensitivity failed for Contains, should be case insensitive");
581 ConnectionManager.Singleton.CloseConnection ();
586 public void ContainsNotMineTest ()
588 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
589 ConnectionManager.Singleton.OpenConnection ();
592 OdbcCommand OdbcCmd1 = conn.CreateCommand ();
593 OdbcCommand OdbcCmd2 = conn.CreateCommand ();
594 OdbcCmd1.CommandType = CommandType.Text;
595 OdbcCmd1.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
596 OdbcCmd2.CommandType = CommandType.Text;
597 OdbcCmd2.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
599 OdbcParameter p1 = OdbcCmd1.Parameters.Add ("@lname", OdbcType.Text, 15);
600 OdbcParameter p2 = OdbcCmd2.Parameters.Add ("@lname", OdbcType.Text, 15);
602 Assert.IsTrue (OdbcCmd1.Parameters.Contains (p1));
603 Assert.IsFalse (OdbcCmd1.Parameters.Contains (p2));
605 ConnectionManager.Singleton.CloseConnection ();
610 public void IndexOfTest ()
612 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
613 ConnectionManager.Singleton.OpenConnection ();
616 OdbcCommand OdbcCmd = 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 OdbcParameter p3Tmp = new OdbcParameter ();
622 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
624 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname), "#1 first parameter not with index 0");
625 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#2 second parameter not with index 1");
626 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (p3Tmp), "#3 non-existing parameter should return -1");
627 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#4 null value should return -1");
628 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#5 Empty string parameter should return -1");
629 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((string)null), "#6 Null string parameter should return -1");
630 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ("foo"), "#7 non-existing string parameter should return -1");
631 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ((Object)p2Age), "#8 second parameter passed as Object did not return index 1");
632 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((Object)p3Tmp), "#9 non-existing parameter passed as Object did not return index -1");
633 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf ((Object)null), "#10 null parameter passed as Object should return index -1");
635 ConnectionManager.Singleton.CloseConnection ();
640 public void IndexOfCaseSensitivityTest ()
642 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
643 ConnectionManager.Singleton.OpenConnection ();
646 OdbcCommand OdbcCmd = conn.CreateCommand ();
647 OdbcCmd.CommandType = CommandType.Text;
648 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
649 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
650 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@AGE", OdbcType.Int, 2);
651 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
653 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"), "#2 Case sensitivity failed for IndexOf, should be case insensitive");
654 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@LNAME"), "#3 Case sensitivity failed for IndexOf, should be case insensitive");
655 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@AGE"), "#4 Case sensitivity failed for IndexOf, should be case insensitive");
656 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@age"), "#5 Case sensitivity failed for IndexOf, should be case insensitive");
658 ConnectionManager.Singleton.CloseConnection ();
663 public void IndexOfNonOdbcParameterTest ()
665 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
666 ConnectionManager.Singleton.OpenConnection ();
669 OdbcCommand OdbcCmd = conn.CreateCommand ();
670 OdbcCmd.CommandType = CommandType.Text;
671 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
672 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
674 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 The collection must contain only one parameter");
676 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (4), "#2 IndexOf must return -1 for non-odbcParameter arguments");
677 Assert.Fail ("Expected Exception InvalidCastException not thrown");
678 } catch (InvalidCastException) {
679 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#3 The collection must contain only one parameter");
682 ConnectionManager.Singleton.CloseConnection ();
687 public void CopyToTest ()
689 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
690 ConnectionManager.Singleton.OpenConnection ();
693 OdbcCommand OdbcCmd = 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);
699 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
700 OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
702 OdbcCmd.Parameters.CopyTo (DestinationParamArray, 1); //starting at 1 instead of 0
704 Assert.AreEqual (4, DestinationParamArray.Length, "#2 The array length should not change");
705 Assert.AreEqual ("@lname", DestinationParamArray [1].ParameterName, "#3 The first parameter must be copied to array at index 1");
706 Assert.AreEqual ("@age", DestinationParamArray [2].ParameterName, "#4 The second parameter must be copied to array at index 2");
707 Assert.AreEqual (null, DestinationParamArray [0], "#5 The remaining elements must remain un-initialized");
708 Assert.AreEqual (null, DestinationParamArray [3], "#6 The remaining elements must remain un-initialized");
710 ConnectionManager.Singleton.CloseConnection ();
715 public void CopyToArgumentExceptionTest ()
717 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
718 ConnectionManager.Singleton.OpenConnection ();
721 OdbcCommand OdbcCmd = conn.CreateCommand ();
722 OdbcCmd.CommandType = CommandType.Text;
723 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
724 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
725 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
727 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
728 OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
730 OdbcCmd.Parameters.CopyTo (DestinationParamArray, 3); //starting at 3, thus the second element will be at index 4
731 Assert.Fail ("Expected Exception ArgumentException not thrown");
732 } catch (ArgumentException) {
733 Assert.AreEqual (null, DestinationParamArray [0], "#2 The DestinationParamArray must remain un-initialized");
734 Assert.AreEqual (null, DestinationParamArray [1], "#3 The DestinationParamArray must remain un-initialized");
735 Assert.AreEqual (null, DestinationParamArray [2], "#4 The DestinationParamArray must remain un-initialized");
736 Assert.AreEqual (null, DestinationParamArray [3], "#5 The DestinationParamArray must remain un-initialized");
739 ConnectionManager.Singleton.CloseConnection ();
744 public void CopyToMultiDimensionalArrayTest ()
746 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
747 ConnectionManager.Singleton.OpenConnection ();
750 OdbcCommand OdbcCmd = conn.CreateCommand ();
751 OdbcCmd.CommandType = CommandType.Text;
752 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
753 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
754 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
756 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
757 OdbcParameter [,] DestinationParamArray = new OdbcParameter [2, 4];
760 OdbcCmd.Parameters.CopyTo (DestinationParamArray, 1); //DestinationParamArray is multi Dimensional
761 Assert.Fail ("Expected Exception ArgumentException not thrown");
762 } catch (ArgumentException) {
763 Assert.AreEqual (null, DestinationParamArray [0, 0], "#2 The DestinationParamArray must remain un-initialized");
764 Assert.AreEqual (null, DestinationParamArray [0, 1], "#3 The DestinationParamArray must remain un-initialized");
765 Assert.AreEqual (null, DestinationParamArray [1, 2], "#4 The DestinationParamArray must remain un-initialized");
766 Assert.AreEqual (null, DestinationParamArray [1, 3], "#5 The DestinationParamArray must remain un-initialized");
769 ConnectionManager.Singleton.CloseConnection ();
774 public void CopyToLowerBoundCheckTest ()
776 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
777 ConnectionManager.Singleton.OpenConnection ();
780 OdbcCommand OdbcCmd = conn.CreateCommand ();
781 OdbcCmd.CommandType = CommandType.Text;
782 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
783 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
784 /*OdbcParameter p2Age = */OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
786 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
787 OdbcParameter [] DestinationParamArray = new OdbcParameter [4];
789 OdbcCmd.Parameters.CopyTo (DestinationParamArray, -1); //index must be >= 0
790 Assert.Fail ("Expected Exception ArgumentOutOfRangeException not thrown");
791 } catch (ArgumentOutOfRangeException) {
792 Assert.AreEqual (null, DestinationParamArray [0], "#2 The DestinationParamArray must remain un-initialized");
793 Assert.AreEqual (null, DestinationParamArray [1], "#3 The DestinationParamArray must remain un-initialized");
794 Assert.AreEqual (null, DestinationParamArray [2], "#4 The DestinationParamArray must remain un-initialized");
795 Assert.AreEqual (null, DestinationParamArray [3], "#5 The DestinationParamArray must remain un-initialized");
798 ConnectionManager.Singleton.CloseConnection ();
803 public void DuplicateParameterNameTest ()
805 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
806 ConnectionManager.Singleton.OpenConnection ();
809 OdbcCommand OdbcCmd = conn.CreateCommand ();
810 OdbcCmd.CommandType = CommandType.Text;
811 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
813 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
815 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
816 OdbcParameter p2Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
817 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 Collection should contain 2 parameters");
819 //Checking IndexOf (string) overload
820 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ("@lname"));
822 //Checking IndexOf (OdbcParameter) overload
823 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf (p1Lname));
824 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Lname));
826 //Checking IndexOf (object) overload
827 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf ((object) p1Lname));
828 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ((object) p2Lname));
830 ConnectionManager.Singleton.CloseConnection ();
835 public void RemoveTest ()
837 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
838 ConnectionManager.Singleton.OpenConnection ();
841 OdbcCommand OdbcCmd = conn.CreateCommand ();
842 OdbcCmd.CommandType = CommandType.Text;
843 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
845 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
847 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
848 OdbcCmd.Parameters.Remove (p1Lname);
849 Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#2 Collection should not contain any parameters");
851 ConnectionManager.Singleton.CloseConnection ();
856 public void RemoveNullTest ()
858 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
859 ConnectionManager.Singleton.OpenConnection ();
862 OdbcCommand OdbcCmd = conn.CreateCommand ();
863 OdbcCmd.CommandType = CommandType.Text;
864 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
866 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
868 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
870 OdbcCmd.Parameters.Remove (null);
871 Assert.Fail ("Expected exception ArgumentNullException was not thrown");
872 } catch (ArgumentNullException) {
873 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
876 ConnectionManager.Singleton.CloseConnection ();
881 public void RemoveEmptyTest ()
883 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
884 ConnectionManager.Singleton.OpenConnection ();
887 OdbcCommand OdbcCmd = conn.CreateCommand ();
888 OdbcCmd.CommandType = CommandType.Text;
889 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
891 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
893 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
895 OdbcCmd.Parameters.Remove (string.Empty);
896 Assert.Fail ("Expected exception InvalidCastException was not thrown");
897 } catch (InvalidCastException) {
898 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
901 ConnectionManager.Singleton.CloseConnection ();
906 public void RemoveNonOdbcParameterTest ()
908 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
909 ConnectionManager.Singleton.OpenConnection ();
912 OdbcCommand OdbcCmd = conn.CreateCommand ();
913 OdbcCmd.CommandType = CommandType.Text;
914 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
916 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
918 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
920 OdbcCmd.Parameters.Remove (4);
921 Assert.Fail ("Expected exception InvalidCastException was not thrown");
922 } catch (InvalidCastException) {
923 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain only one parameter");
926 ConnectionManager.Singleton.CloseConnection ();
931 public void RemoveNonExistingParameterTest ()
933 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
934 ConnectionManager.Singleton.OpenConnection ();
937 OdbcCommand OdbcCmd = conn.CreateCommand ();
938 OdbcCmd.CommandType = CommandType.Text;
939 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
941 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
942 /*OdbcParameter p2Age = new OdbcParameter ();*/
944 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
945 OdbcCmd.Parameters.Remove (p1Lname);
946 Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#2 Collection should not contain any parameters");
948 OdbcCmd.Parameters.Remove (p1Lname);
949 Assert.Fail ("Expected exception ArgumentException not thrown");
950 } catch (ArgumentException) {
951 Assert.AreEqual (0, OdbcCmd.Parameters.Count, "#3 The collection should not contain any parameters");
954 ConnectionManager.Singleton.CloseConnection ();
959 public void RemoveParameterContainedInAnotherCollTest ()
961 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
962 ConnectionManager.Singleton.OpenConnection ();
965 OdbcCommand OdbcCmd = conn.CreateCommand ();
966 OdbcCmd.CommandType = CommandType.Text;
967 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
969 OdbcCommand OdbcCmd2 = conn.CreateCommand ();
970 OdbcCmd2.CommandType = CommandType.Text;
971 OdbcCmd2.CommandText = "SELECT lname FROM employee WHERE fname=? AND age=?";
973 OdbcParameter p1 = OdbcCmd.Parameters.Add ("@p1", OdbcType.Text, 15);
974 /*OdbcParameter p2 = */OdbcCmd.Parameters.Add ("@p2", OdbcType.Text, 15);
976 /*OdbcParameter p3 = */OdbcCmd2.Parameters.Add ("@p3", OdbcType.Text, 15);
977 /*OdbcParameter p4 = */OdbcCmd2.Parameters.Add ("@p4", OdbcType.Text, 15);
979 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#5 The parameter collection of OdbcCmd should contain 2 parameters");
980 Assert.AreEqual (2, OdbcCmd2.Parameters.Count, "#6 The parameter collection of OdbcCmd2 should contain 2 parameters");
982 OdbcCmd2.Parameters.Remove (p1);
983 Assert.Fail ("Expected Exception ArgumentException not thrown");
984 } catch (ArgumentException) {
985 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#5 The parameter collection of OdbcCmd should contain 2 parameters");
986 Assert.AreEqual (2, OdbcCmd2.Parameters.Count, "#6 The parameter collection of OdbcCmd2 should contain 2 parameters");
989 ConnectionManager.Singleton.CloseConnection ();
994 public void RemoveAtTest ()
996 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
997 ConnectionManager.Singleton.OpenConnection ();
1000 OdbcCommand OdbcCmd = conn.CreateCommand ();
1001 OdbcCmd.CommandType = CommandType.Text;
1002 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1004 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1005 OdbcParameter p2Age = OdbcCmd.Parameters.Add ("@age", OdbcType.Int, 2);
1006 OdbcParameter p3Tmp = OdbcCmd.Parameters.Add ("@p3Tmp", OdbcType.Text, 15);
1007 OdbcParameter p4Tmp = OdbcCmd.Parameters.Add ("@p4Tmp", OdbcType.Text, 15);
1009 Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1011 Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#2 the collection does not contain p1Lname");
1012 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#3 p1Lname is not at index 0");
1014 //remove the first parameter
1015 OdbcCmd.Parameters.RemoveAt (0);
1016 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#4 Collection should contain only 3 parameters");
1017 Assert.AreEqual (false, OdbcCmd.Parameters.Contains(p1Lname), "#5 the collection should not contain p1Lname");
1018 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf(p1Lname), "#6 the collection should not contain p1Lname");
1019 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p2Age), "#7 p2Age should now be at index 0");
1020 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf(p3Tmp), "#8 p3Tmp should now be at index 1");
1021 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf(p4Tmp), "#9 p4Tmp should now be at index 2");
1023 //remove the last parameter
1024 OdbcCmd.Parameters.RemoveAt (OdbcCmd.Parameters.Count-1);
1025 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#10 Collection should contain only 2 parameters");
1026 Assert.AreEqual (false, OdbcCmd.Parameters.Contains(p4Tmp), "#11 the collection should not contain p4Tmp");
1027 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf(p4Tmp), "#12 the collection should not contain p4Tmp");
1028 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p2Age), "#13 p2Age should be at index 0");
1029 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf(p3Tmp), "#14 p3Tmp should be at index 1");
1031 ConnectionManager.Singleton.CloseConnection ();
1036 public void RemoveAtOutOfRangeIndexTest ()
1038 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
1039 ConnectionManager.Singleton.OpenConnection ();
1042 OdbcCommand OdbcCmd = conn.CreateCommand ();
1043 OdbcCmd.CommandType = CommandType.Text;
1044 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1046 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1048 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1050 OdbcCmd.Parameters.RemoveAt (9);
1051 Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
1052 } catch (IndexOutOfRangeException) {
1053 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
1054 Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
1055 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
1058 ConnectionManager.Singleton.CloseConnection ();
1063 public void RemoveAtNegativeIndexTest ()
1065 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
1066 ConnectionManager.Singleton.OpenConnection ();
1069 OdbcCommand OdbcCmd = conn.CreateCommand ();
1070 OdbcCmd.CommandType = CommandType.Text;
1071 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1073 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1075 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1077 OdbcCmd.Parameters.RemoveAt (-1);
1078 Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
1079 } catch (IndexOutOfRangeException) {
1080 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
1081 Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
1082 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
1085 ConnectionManager.Singleton.CloseConnection ();
1090 public void RemoveAtBoundaryTest ()
1092 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
1093 ConnectionManager.Singleton.OpenConnection ();
1096 OdbcCommand OdbcCmd = conn.CreateCommand ();
1097 OdbcCmd.CommandType = CommandType.Text;
1098 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1100 OdbcParameter p1Lname = OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1102 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1104 OdbcCmd.Parameters.RemoveAt (OdbcCmd.Parameters.Count);
1105 Assert.Fail ("Expected exception IndexOutOfRangeException not thrown");
1106 } catch (IndexOutOfRangeException) {
1107 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#2 The collection must contain 1 parameter");
1108 Assert.AreEqual (true, OdbcCmd.Parameters.Contains(p1Lname), "#3 the collection does not contain p1Lname");
1109 Assert.AreEqual (0, OdbcCmd.Parameters.IndexOf(p1Lname), "#4 p1Lname is not at index 0");
1112 ConnectionManager.Singleton.CloseConnection ();
1117 public void AddWithValueTest ()
1119 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
1120 ConnectionManager.Singleton.OpenConnection ();
1123 OdbcCommand OdbcCmd = conn.CreateCommand ();
1124 OdbcCmd.CommandType = CommandType.Text;
1125 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1127 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1128 OdbcParameter rt = null; //to check return type
1129 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1131 rt = OdbcCmd.Parameters.AddWithValue ("@P2", "Param2");
1132 Assert.AreEqual (typeof(OdbcParameter), rt.GetType(), "#1a AddWithValue didnt retuen type OdbcParameter");
1133 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 AddWithValue failed for valid parameter name and value");
1134 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@P2"), "#3 collection does not contain @P2");
1135 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@P2"), "#4 Index of added parameter must be 1");
1136 Assert.AreEqual ("Param2", OdbcCmd.Parameters["@P2"].Value, "#5 Value of added parameter must be Param2");
1137 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#6 Parameters with null value must be of type NVarChar");
1139 OdbcCmd.Parameters.AddWithValue ("@P2", "Param2ReAdded"); //adding again
1140 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#7 AddWithValue must append at the end of the collection even for same parameter names");
1141 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("@P2"), "#8 collection does not contain @P2");
1142 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf ("@P2"), "#9 Index of @P2 must be 1");
1143 Assert.AreEqual ("Param2", OdbcCmd.Parameters["@P2"].Value, "#10 Value of added parameter must be Param2");
1144 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters["@P2"].OdbcType, "#11 Parameters with null value must be of type NVarChar");
1146 //Two different parameters with same name but at different positions ie 1 and 2
1147 Assert.AreEqual ("@P2",OdbcCmd.Parameters[1].ParameterName, "#12 The parameter at index 1 must be @P2");
1148 Assert.AreEqual ("@P2",OdbcCmd.Parameters[2].ParameterName, "#13 The parameter at index 2 must be @P2");
1150 //Confirming the parameters by checking their values
1151 Assert.AreEqual ("Param2",OdbcCmd.Parameters[1].Value, "#14The parameter at index 1 must have value Param2");
1152 Assert.AreEqual ("Param2ReAdded",OdbcCmd.Parameters[2].Value, "#15The parameter at index 2 must have value Param2ReAdded");
1154 //Testing for null values
1155 OdbcCmd.Parameters.AddWithValue (null, null);
1156 Assert.AreEqual (4, OdbcCmd.Parameters.Count, "#16 AddWithValue must accept null parameter names and null values");
1157 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#17 AddWithValue must return false for Contains (null)");
1158 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#18 AddWithValue must return -1 for IndexOf (null)");
1159 Assert.AreEqual (null, OdbcCmd.Parameters["Parameter1"].Value, "#19 Value of added parameter must be null");
1160 Assert.AreEqual ("Parameter1",OdbcCmd.Parameters[3].ParameterName, "#20 The parameter at index 3 must be Parameter1");
1161 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[3].OdbcType, "#21 Parameters with null value must be of type NVarChar");
1163 OdbcCmd.Parameters.AddWithValue (null, null); //adding another null parameter
1164 Assert.AreEqual (5, OdbcCmd.Parameters.Count, "#22 AddWithValue must accept null parameter names and null values");
1165 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#23 AddWithValue must return false for Contains (null)");
1166 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#24 AddWithValue must return -1 for IndexOf (null)");
1167 Assert.AreEqual (null, OdbcCmd.Parameters["Parameter2"].Value, "#25 Value of added parameter must be null");
1168 Assert.AreEqual ("Parameter2",OdbcCmd.Parameters[4].ParameterName, "#26 The parameter at index 1 must be Parameter2");
1169 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[4].OdbcType, "#27 Parameters with null value must be of type NVarChar");
1171 //Testing for empty strings
1172 OdbcCmd.Parameters.AddWithValue ("", ""); //adding empty parameter
1173 Assert.AreEqual (6, OdbcCmd.Parameters.Count, "#28 AddWithValue must accept empty names and empty values");
1174 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (""), "#29 AddWithValue must return false for Contains ('')");
1175 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#30 AddWithValue must return -1 for IndexOf ('')");
1176 Assert.AreEqual ("Parameter3",OdbcCmd.Parameters[5].ParameterName, "#31 The parameter at index 5 must be Parameter3");
1177 Assert.AreEqual ("",OdbcCmd.Parameters[5].Value, "#32 The parameter at index 5 must have value as empty string");
1178 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[5].OdbcType, "#33 Parameters with null value must be of type NVarChar");
1180 OdbcCmd.Parameters.AddWithValue ("", ""); //adding another empty parameter
1181 Assert.AreEqual (7, OdbcCmd.Parameters.Count, "#34 AddWithValue must accept empty names and empty values");
1182 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (""), "#35 AddWithValue must return false for Contains ('')");
1183 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (""), "#36 AddWithValue must return -1 for IndexOf ('')");
1184 Assert.AreEqual ("Parameter4",OdbcCmd.Parameters[6].ParameterName, "#37 The parameter at index 6 must have name as Parameter4");
1185 Assert.AreEqual ("",OdbcCmd.Parameters[6].Value, "#38 The parameter at index 6 must have value as empty string");
1186 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[6].OdbcType, "#39 Parameters with null value must be of type NVarChar");
1188 OdbcCmd.Parameters.AddWithValue ("foo", null);
1189 Assert.AreEqual (8, OdbcCmd.Parameters.Count, "#40 AddWithValue must accept string names and null values");
1190 Assert.AreEqual (true, OdbcCmd.Parameters.Contains ("foo"), "#41 AddWithValue must return true for Contains ('foo')");
1191 Assert.AreEqual (7, OdbcCmd.Parameters.IndexOf ("foo"), "#42 AddWithValue must return 7 for IndexOf ('foo')");
1192 Assert.AreEqual ("foo",OdbcCmd.Parameters[7].ParameterName, "#43 The parameter at index 7 must have name foo");
1193 Assert.AreEqual (null,OdbcCmd.Parameters[7].Value, "#44 The parameter at index 7 must have value as null");
1194 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[7].OdbcType, "#45 Parameters with null value must be of type NVarChar");
1196 OdbcCmd.Parameters.AddWithValue (null, 2);
1197 Assert.AreEqual (9, OdbcCmd.Parameters.Count, "#46 AddWithValue must accept empty names and empty values");
1198 Assert.AreEqual (false, OdbcCmd.Parameters.Contains (null), "#47 AddWithValue must return false for Contains (null)");
1199 Assert.AreEqual (-1, OdbcCmd.Parameters.IndexOf (null), "#48 AddWithValue must return -1 for IndexOf ('')");
1200 Assert.AreEqual ("Parameter5",OdbcCmd.Parameters[8].ParameterName, "#49 The parameter at index 8 must have name as Parameter5");
1201 Assert.AreEqual (2,OdbcCmd.Parameters[8].Value, "#50 The parameter at index 8 must have value as 2");
1202 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[8].OdbcType, "#51 Parameter must be of type NVarChar");
1204 ConnectionManager.Singleton.CloseConnection ();
1209 public void DefaultNamesAndValuesTest ()
1211 OdbcConnection conn = (OdbcConnection) ConnectionManager.Singleton.Connection;
1212 ConnectionManager.Singleton.OpenConnection ();
1215 OdbcCommand OdbcCmd = conn.CreateCommand ();
1216 OdbcCmd.CommandType = CommandType.Text;
1217 OdbcCmd.CommandText = "SELECT fname FROM employee WHERE lname=? AND age=?";
1219 /*OdbcParameter p1Lname = */OdbcCmd.Parameters.Add ("@lname", OdbcType.Text, 15);
1220 Assert.AreEqual (1, OdbcCmd.Parameters.Count, "#1 Initialization error, the collection does not contain desired no. of parameters");
1222 OdbcParameter p2Age = new OdbcParameter ();
1223 OdbcParameter p3Tmp = new OdbcParameter ();
1225 OdbcCmd.Parameters.Add (p2Age);
1226 Assert.AreEqual (2, OdbcCmd.Parameters.Count, "#2 The collection must contain 2 parameters");
1227 Assert.AreEqual (true, OdbcCmd.Parameters.Contains (p2Age), "#3 Collection does not contain p2Age");
1228 Assert.AreEqual (1, OdbcCmd.Parameters.IndexOf (p2Age), "#4 Index of p2Age must be 1");
1229 Assert.AreEqual (null, OdbcCmd.Parameters[1].Value, "#5 Value of added parameter must be null");
1230 Assert.AreEqual ("Parameter1",OdbcCmd.Parameters[1].ParameterName, "#6 The parameter must have a default name");
1231 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[1].OdbcType, "#7 Parameters with null value must be of type NVarChar");
1233 OdbcCmd.Parameters.Insert (2,p3Tmp);
1234 Assert.AreEqual (3, OdbcCmd.Parameters.Count, "#8 The collection must contain 3 parameters");
1235 Assert.AreEqual (true, OdbcCmd.Parameters.Contains (p3Tmp), "#9 Collection does not contain p3Tmp");
1236 Assert.AreEqual (2, OdbcCmd.Parameters.IndexOf (p3Tmp), "#10 Index of p3Tmp must be 2");
1237 Assert.AreEqual (null, OdbcCmd.Parameters[2].Value, "#11 Value of added parameter must be null");
1238 Assert.AreEqual ("Parameter2",OdbcCmd.Parameters[2].ParameterName, "#12 The parameter must have a default name");
1239 Assert.AreEqual (OdbcType.NVarChar,OdbcCmd.Parameters[2].OdbcType, "#13 Parameters with null value must be of type NVarChar");
1241 ConnectionManager.Singleton.CloseConnection ();