OdbcParameterCollectionTest.cs 59 KB

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