SqlCommandBuilderTest.cs 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468
  1. // SqlCommandBuilderTest.cs - NUnit Test Cases for testing the
  2. // SqlCommandBuilder class
  3. //
  4. // Authors:
  5. // Sureshkumar T ([email protected])
  6. // Veerapuram Varadhan ([email protected])
  7. //
  8. // Copyright (c) 2004 Novell Inc., and the individuals listed on the
  9. // ChangeLog entries.
  10. //
  11. //
  12. // Permission is hereby granted, free of charge, to any person
  13. // obtaining a copy of this software and associated documentation
  14. // files (the "Software"), to deal in the Software without
  15. // restriction, including without limitation the rights to use, copy,
  16. // modify, merge, publish, distribute, sublicense, and/or sell copies
  17. // of the Software, and to permit persons to whom the Software is
  18. // furnished to do so, subject to the following conditions:
  19. //
  20. // The above copyright notice and this permission notice shall be
  21. // included in all copies or substantial portions of the Software.
  22. //
  23. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27. // BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28. // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29. // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30. // SOFTWARE.
  31. using System;
  32. using System.Data;
  33. using System.Data.Common;
  34. using System.Data.SqlClient;
  35. using System.Data.SqlTypes;
  36. using Mono.Data;
  37. using NUnit.Framework;
  38. namespace MonoTests.System.Data
  39. {
  40. [TestFixture]
  41. [Category ("sqlserver")]
  42. public class SqlCommandBuilderTest
  43. {
  44. SqlConnection conn = null;
  45. static EngineConfig engine;
  46. [TestFixtureSetUp]
  47. public void init ()
  48. {
  49. conn = new SqlConnection (ConnectionManager.Singleton.ConnectionString);
  50. engine = ConnectionManager.Singleton.Engine;
  51. }
  52. private static EngineConfig Engine {
  53. get {
  54. return engine;
  55. }
  56. }
  57. [SetUp]
  58. public void Setup ()
  59. {
  60. conn.Open ();
  61. }
  62. [TearDown]
  63. public void TearDown ()
  64. {
  65. conn.Close ();
  66. }
  67. [Test]
  68. public void GetInsertCommand1 ()
  69. {
  70. SqlCommand cmd = null;
  71. try {
  72. string selectQuery = "select id, fname, lname " +
  73. "from employee where id = 1";
  74. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  75. DataSet ds = new DataSet ();
  76. da.Fill (ds, "IntTest");
  77. Assert.AreEqual (1, ds.Tables.Count);
  78. SqlCommandBuilder cb;
  79. cb = new SqlCommandBuilder (da);
  80. cmd = cb.GetInsertCommand ();
  81. Assert.AreEqual ("INSERT INTO [employee] ([id], " +
  82. "[fname], [lname]) VALUES (@p1, @p2, @p3)",
  83. cmd.CommandText, "#A1");
  84. Assert.AreSame (conn, cmd.Connection, "#A2");
  85. AssertInsertParameters (cmd, false, "#A3:");
  86. Assert.AreSame (cmd, cb.GetInsertCommand (), "#A4");
  87. cb.RefreshSchema ();
  88. cb.QuotePrefix = "\"";
  89. cmd = cb.GetInsertCommand ();
  90. Assert.AreEqual ("INSERT INTO \"employee] (\"id], " +
  91. "\"fname], \"lname]) VALUES (@p1, @p2, @p3)",
  92. cmd.CommandText, "#B1");
  93. Assert.AreSame (conn, cmd.Connection, "#B2");
  94. AssertInsertParameters (cmd, false, "#B3:");
  95. Assert.AreSame (cmd, cb.GetInsertCommand (), "#B4");
  96. cb.RefreshSchema ();
  97. cb.QuoteSuffix = "\"";
  98. cmd = cb.GetInsertCommand ();
  99. Assert.AreEqual ("INSERT INTO \"employee\" (\"id\", "
  100. + "\"fname\", \"lname\") VALUES (@p1, @p2, @p3)",
  101. cmd.CommandText, "#C1");
  102. Assert.AreSame (conn, cmd.Connection, "#C2");
  103. AssertInsertParameters (cmd, false, "#C3");
  104. Assert.AreSame (cmd, cb.GetInsertCommand (), "#C4");
  105. } finally {
  106. if (cmd != null)
  107. cmd.Dispose ();
  108. }
  109. }
  110. [Test]
  111. public void GetInsertCommand1_Expression ()
  112. {
  113. SqlCommand cmd = null;
  114. try {
  115. string selectQuery = "select id, fname, lname, " +
  116. "id+1 as next_id from employee where " +
  117. "id = 1";
  118. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  119. DataSet ds = new DataSet ();
  120. da.Fill (ds, "IntTest");
  121. Assert.AreEqual (1, ds.Tables.Count);
  122. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  123. cmd = cb.GetInsertCommand ();
  124. Assert.AreEqual ("INSERT INTO [employee] " +
  125. "([id], [fname], [lname]) VALUES " +
  126. "(@p1, @p2, @p3)", cmd.CommandText, "#1");
  127. Assert.AreSame (conn, cmd.Connection, "#2");
  128. AssertInsertParameters (cmd, false, "#3:");
  129. } finally {
  130. if (cmd != null)
  131. cmd.Dispose ();
  132. }
  133. }
  134. [Test] // GetInsertCommand (Boolean)
  135. public void GetInsertCommand2 ()
  136. {
  137. SqlCommand cmd = null;
  138. try {
  139. string selectQuery = "select id, fname, lname " +
  140. "from employee where id = 1";
  141. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  142. DataSet ds = new DataSet ();
  143. da.Fill (ds, "IntTest");
  144. Assert.AreEqual (1, ds.Tables.Count);
  145. SqlCommandBuilder cb;
  146. cb = new SqlCommandBuilder (da);
  147. cmd = cb.GetInsertCommand (true);
  148. Assert.AreEqual ("INSERT INTO [employee] ([id], " +
  149. "[fname], [lname]) VALUES (@id, @fname, " +
  150. "@lname)", cmd.CommandText, "#A1");
  151. Assert.AreSame (conn, cmd.Connection, "#A2");
  152. AssertInsertParameters (cmd, true, "#A3:");
  153. cmd = cb.GetInsertCommand (false);
  154. Assert.AreEqual ("INSERT INTO [employee] ([id], " +
  155. "[fname], [lname]) VALUES (@id, @fname, " +
  156. "@lname)", cmd.CommandText, "#B1");
  157. Assert.AreSame (conn, cmd.Connection, "#B2");
  158. AssertInsertParameters (cmd, true, "#B3:");
  159. cb = new SqlCommandBuilder (da);
  160. cmd = cb.GetInsertCommand (false);
  161. Assert.AreEqual ("INSERT INTO [employee] ([id], " +
  162. "[fname], [lname]) VALUES (@p1, @p2, @p3)",
  163. cmd.CommandText, "#C1");
  164. Assert.AreSame (conn, cmd.Connection, "#C2");
  165. AssertInsertParameters (cmd, false, "#C3:");
  166. cmd = cb.GetInsertCommand (true);
  167. Assert.AreEqual ("INSERT INTO [employee] ([id], " +
  168. "[fname], [lname]) VALUES (@id, @fname, " +
  169. "@lname)", cmd.CommandText, "#D1");
  170. Assert.AreSame (conn, cmd.Connection, "#D2");
  171. AssertInsertParameters (cmd, true, "#D3:");
  172. } finally {
  173. if (cmd != null)
  174. cmd.Dispose ();
  175. }
  176. }
  177. [Test] // GetUpdateCommand ()
  178. public void GetUpdateCommand1 ()
  179. {
  180. SqlCommand cmd = null;
  181. try {
  182. string selectQuery = "select id, fname, lname, " +
  183. "id+1 as next_id from employee where " +
  184. "id = 3 and lname = 'A' and fname = 'B'";
  185. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  186. DataSet ds = new DataSet ();
  187. da.Fill (ds, "IntTest");
  188. Assert.AreEqual (1, ds.Tables.Count);
  189. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  190. cmd = cb.GetUpdateCommand ();
  191. Assert.AreEqual ("UPDATE [employee] SET [id] = @p1, " +
  192. "[fname] = @p2, [lname] = @p3 WHERE (([id] = @p4) " +
  193. "AND ([fname] = @p5) AND ((@p6 = 1 " +
  194. "AND [lname] IS NULL) OR ([lname] = @p7)))",
  195. cmd.CommandText, "#A1");
  196. Assert.AreSame (conn, cmd.Connection, "#A2");
  197. AssertUpdateParameters (cmd, false, "#A3:");
  198. Assert.AreSame (cmd, cb.GetUpdateCommand (), "#A4");
  199. cb.RefreshSchema ();
  200. cb.QuotePrefix = "\"";
  201. cmd = cb.GetUpdateCommand ();
  202. Assert.AreEqual ("UPDATE \"employee] SET \"id] = @p1, " +
  203. "\"fname] = @p2, \"lname] = @p3 WHERE ((\"id] = @p4) " +
  204. "AND (\"fname] = @p5) AND ((@p6 = 1 " +
  205. "AND \"lname] IS NULL) OR (\"lname] = @p7)))",
  206. cmd.CommandText, "#B1");
  207. Assert.AreSame (conn, cmd.Connection, "#B2");
  208. AssertUpdateParameters (cmd, false, "#B3:");
  209. Assert.AreSame (cmd, cb.GetUpdateCommand (), "#B4");
  210. cb.RefreshSchema ();
  211. cb.QuoteSuffix = "\"";
  212. cmd = cb.GetUpdateCommand ();
  213. Assert.AreEqual ("UPDATE \"employee\" SET \"id\" = @p1, " +
  214. "\"fname\" = @p2, \"lname\" = @p3 WHERE ((\"id\" = @p4) " +
  215. "AND (\"fname\" = @p5) AND ((@p6 = 1 " +
  216. "AND \"lname\" IS NULL) OR (\"lname\" = @p7)))",
  217. cmd.CommandText, "#C1");
  218. Assert.AreSame (conn, cmd.Connection, "#C2");
  219. AssertUpdateParameters (cmd, false, "#C3:");
  220. Assert.AreSame (cmd, cb.GetUpdateCommand (), "#C4");
  221. } finally {
  222. if (cmd != null)
  223. cmd.Dispose ();
  224. }
  225. }
  226. [Test] // GetUpdateCommand ()
  227. public void GetUpdateCommand1_AutoIncrement ()
  228. {
  229. if (ClientVersion == 7)
  230. Assert.Ignore ("Key information is not available for temporary tables.");
  231. SqlCommand cmd = null;
  232. try {
  233. cmd = conn.CreateCommand ();
  234. cmd.CommandText = "create table #tmp_table (id int primary key , counter int identity(1,1), value varchar(10))";
  235. cmd.ExecuteNonQuery ();
  236. string selectQuery = "select id, counter, value, id+1 as next_id from #tmp_table";
  237. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  238. DataSet ds = new DataSet ();
  239. da.Fill (ds);
  240. Assert.AreEqual (1, ds.Tables.Count);
  241. Assert.AreEqual (4, ds.Tables [0].Columns.Count);
  242. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  243. cmd = cb.GetUpdateCommand ();
  244. Assert.AreEqual ("UPDATE [#tmp_table] SET [id] = @p1, " +
  245. "[value] = @p2 WHERE (([id] = @p3) AND (" +
  246. "[counter] = @p4) AND ((@p5 = 1 AND [value] IS NULL) " +
  247. "OR ([value] = @p6)))", cmd.CommandText, "#1");
  248. Assert.AreEqual (6, cmd.Parameters.Count, "#2");
  249. } finally {
  250. if (cmd != null)
  251. cmd.Dispose ();
  252. }
  253. }
  254. [Test] // GetUpdateCommand ()
  255. public void GetUpdateCommand1_CheckParameters ()
  256. {
  257. SqlCommand cmd = null;
  258. try {
  259. SqlDataAdapter adapter = new SqlDataAdapter (
  260. "select id, type_varchar from string_family",
  261. conn);
  262. SqlCommandBuilder cb = new SqlCommandBuilder (adapter);
  263. cmd = cb.GetUpdateCommand ();
  264. Assert.AreEqual (5, cmd.Parameters.Count, "#1");
  265. Assert.AreEqual (SqlDbType.Int, cmd.Parameters ["@p4"].SqlDbType, "#2");
  266. Assert.AreEqual (1, cmd.Parameters ["@p4"].Value, "#3");
  267. cmd = cb.GetDeleteCommand ();
  268. Assert.AreEqual (3, cmd.Parameters.Count, "#4");
  269. Assert.AreEqual (SqlDbType.Int, cmd.Parameters ["@p2"].SqlDbType, "#5");
  270. Assert.AreEqual (1, cmd.Parameters ["@p2"].Value, "#6");
  271. } finally {
  272. if (cmd != null)
  273. cmd.Dispose ();
  274. }
  275. }
  276. [Test] // GetUpdateCommand (Boolean)
  277. public void GetUpdateCommand2 ()
  278. {
  279. SqlCommand cmd = null;
  280. try {
  281. string selectQuery = "select id, fname, lname, id+1 as next_id from employee where id = 1";
  282. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  283. DataSet ds = new DataSet ();
  284. da.Fill (ds, "IntTest");
  285. Assert.AreEqual (1, ds.Tables.Count);
  286. SqlCommandBuilder cb;
  287. cb = new SqlCommandBuilder (da);
  288. cmd = cb.GetUpdateCommand (true);
  289. Assert.AreEqual ("UPDATE [employee] SET [id] = @id, " +
  290. "[fname] = @fname, [lname] = @lname WHERE " +
  291. "(([id] = @Original_id) AND ([fname] = " +
  292. "@Original_fname) AND ((@IsNull_lname = 1 " +
  293. "AND [lname] IS NULL) OR ([lname] = " +
  294. "@Original_lname)))", cmd.CommandText, "#A1");
  295. Assert.AreSame (conn, cmd.Connection, "#A2");
  296. AssertUpdateParameters (cmd, true, "#A3:");
  297. cmd = cb.GetUpdateCommand (false);
  298. Assert.AreEqual ("UPDATE [employee] SET [id] = @id, " +
  299. "[fname] = @fname, [lname] = @lname WHERE " +
  300. "(([id] = @Original_id) AND ([fname] = " +
  301. "@Original_fname) AND ((@IsNull_lname = 1 " +
  302. "AND [lname] IS NULL) OR ([lname] = " +
  303. "@Original_lname)))", cmd.CommandText, "#B1");
  304. Assert.AreSame (conn, cmd.Connection, "#B2");
  305. AssertUpdateParameters (cmd, true, "#B3:");
  306. cb = new SqlCommandBuilder (da);
  307. cmd = cb.GetUpdateCommand (false);
  308. Assert.AreEqual ("UPDATE [employee] SET [id] = @p1, " +
  309. "[fname] = @p2, [lname] = @p3 WHERE " +
  310. "(([id] = @p4) AND ([fname] = @p5) AND " +
  311. "((@p6 = 1 AND [lname] IS NULL) OR " +
  312. "([lname] = @p7)))", cmd.CommandText, "#C1");
  313. Assert.AreSame (conn, cmd.Connection, "#C2");
  314. AssertUpdateParameters (cmd, false, "#C3:");
  315. cmd = cb.GetUpdateCommand (true);
  316. Assert.AreEqual ("UPDATE [employee] SET [id] = @id, " +
  317. "[fname] = @fname, [lname] = @lname WHERE " +
  318. "(([id] = @Original_id) AND ([fname] = " +
  319. "@Original_fname) AND ((@IsNull_lname = 1 " +
  320. "AND [lname] IS NULL) OR ([lname] = " +
  321. "@Original_lname)))", cmd.CommandText, "#D1");
  322. Assert.AreSame (conn, cmd.Connection, "#D2");
  323. AssertUpdateParameters (cmd, true, "#D3:");
  324. } finally {
  325. if (cmd != null)
  326. cmd.Dispose ();
  327. }
  328. }
  329. [Test] // GetUpdateCommand (Boolean)
  330. public void GetUpdateCommand2_AutoIncrement ()
  331. {
  332. SqlCommand cmd = null;
  333. try {
  334. cmd = conn.CreateCommand ();
  335. cmd.CommandText = "create table #tmp_table (id int primary key , counter int identity(1,1), value varchar(10))";
  336. cmd.ExecuteNonQuery ();
  337. string selectQuery = "select id, counter, value, id+1 as next_id from #tmp_table";
  338. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  339. DataSet ds = new DataSet ();
  340. da.Fill (ds);
  341. Assert.AreEqual (1, ds.Tables.Count);
  342. Assert.AreEqual (4, ds.Tables [0].Columns.Count);
  343. SqlCommandBuilder cb;
  344. cb = new SqlCommandBuilder (da);
  345. cmd = cb.GetUpdateCommand (true);
  346. Assert.AreEqual ("UPDATE [#tmp_table] SET [id] = @id, " +
  347. "[value] = @value WHERE (([id] = @Original_id) " +
  348. "AND ([counter] = @Original_counter) AND " +
  349. "((@IsNull_value = 1 AND [value] IS NULL) " +
  350. "OR ([value] = @Original_value)))",
  351. cmd.CommandText, "#A1");
  352. Assert.AreEqual (6, cmd.Parameters.Count, "#A2");
  353. cmd = cb.GetUpdateCommand (false);
  354. Assert.AreEqual ("UPDATE [#tmp_table] SET [id] = @id, " +
  355. "[value] = @value WHERE (([id] = @Original_id) " +
  356. "AND ([counter] = @Original_counter) AND " +
  357. "((@IsNull_value = 1 AND [value] IS NULL) " +
  358. "OR ([value] = @Original_value)))",
  359. cmd.CommandText, "#B1");
  360. Assert.AreEqual (6, cmd.Parameters.Count, "#B2");
  361. cb = new SqlCommandBuilder (da);
  362. cmd = cb.GetUpdateCommand (false);
  363. Assert.AreEqual ("UPDATE [#tmp_table] SET [id] = @p1, " +
  364. "[value] = @p2 WHERE (([id] = @p3) " +
  365. "AND ([counter] = @p4) AND ((@p5 = 1 " +
  366. "AND [value] IS NULL) OR ([value] = @p6)))",
  367. cmd.CommandText, "#C1");
  368. Assert.AreEqual (6, cmd.Parameters.Count, "#C2");
  369. cmd = cb.GetUpdateCommand (true);
  370. Assert.AreEqual ("UPDATE [#tmp_table] SET [id] = @id, " +
  371. "[value] = @value WHERE (([id] = @Original_id) " +
  372. "AND ([counter] = @Original_counter) AND " +
  373. "((@IsNull_value = 1 AND [value] IS NULL) " +
  374. "OR ([value] = @Original_value)))",
  375. cmd.CommandText, "#D1");
  376. Assert.AreEqual (6, cmd.Parameters.Count, "#D2");
  377. } finally {
  378. if (cmd != null)
  379. cmd.Dispose ();
  380. }
  381. }
  382. [Test] // GetUpdateCommand (Boolean)
  383. public void GetUpdateDeleteCommand2_CheckParameters ()
  384. {
  385. SqlCommand cmd = null;
  386. try {
  387. SqlDataAdapter adapter = new SqlDataAdapter (
  388. "select id, type_varchar from string_family",
  389. conn);
  390. SqlCommandBuilder cb = new SqlCommandBuilder (adapter);
  391. SqlCommand updateCommand = cb.GetUpdateCommand (true);
  392. Assert.AreEqual (5, updateCommand.Parameters.Count, "#A1");
  393. Assert.AreEqual (SqlDbType.VarChar, updateCommand.Parameters ["@type_varchar"].SqlDbType, "#A2");
  394. // FIXME: NotWorking
  395. //Assert.AreEqual (1, updateCommand.Parameters ["@type_char"].Value, "#A3");
  396. SqlCommand delCommand = cb.GetDeleteCommand (true);
  397. Assert.AreEqual (3, delCommand.Parameters.Count, "#B");
  398. Assert.AreEqual (DbType.Int32, delCommand.Parameters [0].DbType, "#B: DbType (0)");
  399. Assert.AreEqual ("@Original_id", delCommand.Parameters [0].ParameterName, "#B: ParameterName (0)");
  400. Assert.AreEqual ("id", delCommand.Parameters [0].SourceColumn, "#B: SourceColumn (0)");
  401. Assert.AreEqual (SqlDbType.Int, delCommand.Parameters [0].SqlDbType, "#B: SqlDbType (0)");
  402. Assert.IsNull (delCommand.Parameters [0].Value, "#B: Value (0)");
  403. Assert.AreEqual (DbType.Int32, delCommand.Parameters [1].DbType, "#B: DbType (1)");
  404. Assert.AreEqual ("@IsNull_type_varchar", delCommand.Parameters [1].ParameterName, "#B: ParameterName (1)");
  405. Assert.AreEqual ("type_varchar", delCommand.Parameters [1].SourceColumn, "#B: SourceColumn (1)");
  406. Assert.AreEqual (SqlDbType.Int, delCommand.Parameters [1].SqlDbType, "#B: SqlDbType (1)");
  407. Assert.AreEqual (1, delCommand.Parameters [1].Value, "#B: Value (1)");
  408. Assert.AreEqual (DbType.AnsiString, delCommand.Parameters [2].DbType, "#B: DbType (2)");
  409. Assert.AreEqual ("@Original_type_varchar", delCommand.Parameters [2].ParameterName, "#B: ParameterName (2)");
  410. Assert.AreEqual ("type_varchar", delCommand.Parameters [2].SourceColumn, "#B: SourceColumn (2)");
  411. Assert.AreEqual (SqlDbType.VarChar, delCommand.Parameters [2].SqlDbType, "#B: SqlDbType (2)");
  412. Assert.IsNull (delCommand.Parameters [2].Value, "#B: Value (2)");
  413. } finally {
  414. if (cmd != null)
  415. cmd.Dispose ();
  416. }
  417. }
  418. [Test]
  419. public void GetUpdateCommandDBConcurrencyExceptionTest ()
  420. {
  421. string selectQuery = "select id, fname from employee where id = 1";
  422. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  423. DataSet ds = new DataSet ();
  424. da.Fill (ds, "IntTest");
  425. Assert.AreEqual (1, ds.Tables.Count);
  426. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  427. Assert.IsNotNull (cb);
  428. DataRow [] rows = ds.Tables [0].Select ("id=1");
  429. rows [0] [0] = 6660; // non existent
  430. ds.Tables [0].AcceptChanges (); // moves 6660 to original value
  431. rows [0] [0] = 1; // moves 6660 as search key into db table
  432. try {
  433. da.Update (rows);
  434. Assert.Fail ("#1");
  435. } catch (DBConcurrencyException ex) {
  436. // Concurrency violation: the UpdateCommand
  437. // affected 0 of the expected 1 records
  438. Assert.AreEqual (typeof (DBConcurrencyException), ex.GetType (), "#3");
  439. Assert.IsNull (ex.InnerException, "#4");
  440. Assert.IsNotNull (ex.Message, "#5");
  441. Assert.AreSame (rows [0], ex.Row, "#6");
  442. Assert.AreEqual (1, ex.RowCount, "#7");
  443. }
  444. }
  445. [Test]
  446. public void GetDeleteCommandDBConcurrencyExceptionTest ()
  447. {
  448. string selectQuery = "select id, fname from employee where id = 1";
  449. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  450. DataSet ds = new DataSet ();
  451. da.Fill (ds, "IntTest");
  452. Assert.AreEqual (1, ds.Tables.Count);
  453. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  454. Assert.IsNotNull (cb);
  455. DataRow [] rows = ds.Tables [0].Select ("id=1");
  456. rows [0] [0] = 6660; // non existent
  457. ds.Tables [0].AcceptChanges (); // moves 6660 to original value
  458. rows [0].Delete (); // moves 6660 as search key into db table
  459. try {
  460. da.Update (rows);
  461. Assert.Fail ("#1");
  462. } catch (DBConcurrencyException ex) {
  463. // Concurrency violation: the DeleteCommand
  464. // affected 0 of the expected 1 records
  465. Assert.AreEqual (typeof (DBConcurrencyException), ex.GetType (), "#2");
  466. Assert.IsNull (ex.InnerException, "#3");
  467. Assert.IsNotNull (ex.Message, "#4");
  468. Assert.AreSame (rows [0], ex.Row, "#5");
  469. Assert.AreEqual (1, ex.RowCount, "#6");
  470. }
  471. }
  472. [Test] // GetDeleteCommand ()
  473. public void GetDeleteCommand1 ()
  474. {
  475. SqlCommand cmd = null;
  476. try {
  477. string selectQuery = "select id, fname, lname, " +
  478. "id+2 as next_id from employee where " +
  479. "id = 3 and lname = 'A' and fname = 'B'";
  480. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  481. DataSet ds = new DataSet ();
  482. da.Fill (ds, "IntTest");
  483. Assert.AreEqual (1, ds.Tables.Count);
  484. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  485. cmd = cb.GetDeleteCommand ();
  486. Assert.AreEqual ("DELETE FROM [employee] WHERE " +
  487. "(([id] = @p1) AND ([fname] = @p2) AND " +
  488. "((@p3 = 1 AND [lname] IS NULL) OR " +
  489. "([lname] = @p4)))", cmd.CommandText, "#A1");
  490. Assert.AreSame (conn, cmd.Connection, "#A2");
  491. AssertDeleteParameters (cmd, false, "#A3:");
  492. Assert.AreSame (cmd, cb.GetDeleteCommand (), "#A4");
  493. cb.RefreshSchema ();
  494. cb.QuotePrefix = "\"";
  495. cmd = cb.GetDeleteCommand ();
  496. Assert.AreEqual ("DELETE FROM \"employee] WHERE " +
  497. "((\"id] = @p1) AND (\"fname] = @p2) AND " +
  498. "((@p3 = 1 AND \"lname] IS NULL) OR " +
  499. "(\"lname] = @p4)))", cmd.CommandText, "#B1");
  500. Assert.AreSame (conn, cmd.Connection, "#B2");
  501. AssertDeleteParameters (cmd, false, "#B3:");
  502. Assert.AreSame (cmd, cb.GetDeleteCommand (), "#B4");
  503. cb.RefreshSchema ();
  504. cb.QuoteSuffix = "\"";
  505. cmd = cb.GetDeleteCommand ();
  506. Assert.AreEqual ("DELETE FROM \"employee\" WHERE " +
  507. "((\"id\" = @p1) AND (\"fname\" = @p2) AND " +
  508. "((@p3 = 1 AND \"lname\" IS NULL) OR " +
  509. "(\"lname\" = @p4)))", cmd.CommandText, "#C1");
  510. Assert.AreSame (conn, cmd.Connection, "#C2");
  511. AssertDeleteParameters (cmd, false, "#C3:");
  512. Assert.AreSame (cmd, cb.GetDeleteCommand (), "#C4");
  513. } finally {
  514. if (cmd != null)
  515. cmd.Dispose ();
  516. }
  517. }
  518. [Test] // GetDeleteCommand ()
  519. public void GetDeleteCommand1_AutoIncrement ()
  520. {
  521. if (ClientVersion == 7)
  522. Assert.Ignore ("Key information is not available for temporary tables.");
  523. SqlCommand cmd = null;
  524. try {
  525. cmd = conn.CreateCommand ();
  526. cmd.CommandText = "create table #tmp_table (id int primary key , counter int identity(1,1), value varchar(10))";
  527. cmd.ExecuteNonQuery ();
  528. string selectQuery = "select id, counter, value, id+1 as next_id from #tmp_table";
  529. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  530. DataSet ds = new DataSet ();
  531. da.Fill (ds);
  532. Assert.AreEqual (1, ds.Tables.Count);
  533. Assert.AreEqual (4, ds.Tables [0].Columns.Count);
  534. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  535. cmd = cb.GetDeleteCommand ();
  536. Assert.AreEqual ("DELETE FROM [#tmp_table] WHERE " +
  537. "(([id] = @p1) AND ([counter] = @p2) AND " +
  538. "((@p3 = 1 AND [value] IS NULL) OR ([value] = @p4)))",
  539. cmd.CommandText, "#1");
  540. Assert.AreEqual (4, cmd.Parameters.Count, "#2");
  541. } finally {
  542. if (cmd != null)
  543. cmd.Dispose ();
  544. }
  545. }
  546. [Test] // GetDeleteCommand ()
  547. public void GetDeleteCommand1_CheckParameters ()
  548. {
  549. SqlCommand cmd = null;
  550. try {
  551. SqlDataAdapter adapter = new SqlDataAdapter (
  552. "select id, type_varchar from string_family",
  553. conn);
  554. SqlCommandBuilder cb = new SqlCommandBuilder (adapter);
  555. cmd = cb.GetDeleteCommand ();
  556. Assert.AreEqual (3, cmd.Parameters.Count, "#1");
  557. Assert.AreEqual (SqlDbType.Int, cmd.Parameters ["@p2"].SqlDbType, "#2");
  558. Assert.AreEqual (1, cmd.Parameters ["@p2"].Value, "#3");
  559. } finally {
  560. if (cmd != null)
  561. cmd.Dispose ();
  562. }
  563. }
  564. [Test] // GetDeleteCommand ()
  565. public void GetDeleteCommand2 ()
  566. {
  567. SqlCommand cmd = null;
  568. try {
  569. string selectQuery = "select id, fname, lname, id+2 as next_id from employee where id = 3";
  570. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  571. DataSet ds = new DataSet ();
  572. da.Fill (ds, "IntTest");
  573. Assert.AreEqual (1, ds.Tables.Count);
  574. SqlCommandBuilder cb;
  575. cb = new SqlCommandBuilder (da);
  576. cmd = cb.GetDeleteCommand (true);
  577. Assert.AreEqual ("DELETE FROM [employee] WHERE " +
  578. "(([id] = @Original_id) AND ([fname] = " +
  579. "@Original_fname) AND ((@IsNull_lname = 1 " +
  580. "AND [lname] IS NULL) OR ([lname] = " +
  581. "@Original_lname)))", cmd.CommandText, "#A1");
  582. Assert.AreSame (conn, cmd.Connection, "#A2");
  583. AssertDeleteParameters (cmd, true, "#A3:");
  584. Assert.AreSame (cmd, cb.GetDeleteCommand (true), "#A4");
  585. cmd = cb.GetDeleteCommand (false);
  586. Assert.AreEqual ("DELETE FROM [employee] WHERE " +
  587. "(([id] = @Original_id) AND ([fname] = " +
  588. "@Original_fname) AND ((@IsNull_lname = 1 " +
  589. "AND [lname] IS NULL) OR ([lname] = " +
  590. "@Original_lname)))", cmd.CommandText, "#B1");
  591. Assert.AreSame (conn, cmd.Connection, "#B2");
  592. AssertDeleteParameters (cmd, true, "#B3:");
  593. Assert.AreSame (cmd, cb.GetDeleteCommand (false), "#B4");
  594. cb = new SqlCommandBuilder (da);
  595. cmd = cb.GetDeleteCommand (false);
  596. Assert.AreEqual ("DELETE FROM [employee] WHERE " +
  597. "(([id] = @p1) AND ([fname] = @p2) AND " +
  598. "((@p3 = 1 AND [lname] IS NULL) OR " +
  599. "([lname] = @p4)))", cmd.CommandText, "#C1");
  600. Assert.AreSame (conn, cmd.Connection, "#C2");
  601. AssertDeleteParameters (cmd, false, "#C3:");
  602. Assert.AreSame (cmd, cb.GetDeleteCommand (false), "#C4");
  603. cmd = cb.GetDeleteCommand (true);
  604. Assert.AreEqual ("DELETE FROM [employee] WHERE " +
  605. "(([id] = @Original_id) AND ([fname] = " +
  606. "@Original_fname) AND ((@IsNull_lname = 1 " +
  607. "AND [lname] IS NULL) OR ([lname] = " +
  608. "@Original_lname)))", cmd.CommandText, "#D1");
  609. Assert.AreSame (conn, cmd.Connection, "#D2");
  610. AssertDeleteParameters (cmd, true, "#D3:");
  611. Assert.AreSame (cmd, cb.GetDeleteCommand (false), "#D4");
  612. } finally {
  613. if (cmd != null)
  614. cmd.Dispose ();
  615. }
  616. }
  617. [Test] // GetDeleteCommand (Boolean)
  618. public void GetDeleteCommand2_AutoIncrement ()
  619. {
  620. SqlCommand cmd = null;
  621. try {
  622. cmd = conn.CreateCommand ();
  623. cmd.CommandText = "create table #tmp_table (id int primary key , counter int identity(1,1), value varchar(10))";
  624. cmd.ExecuteNonQuery ();
  625. string selectQuery = "select id, counter, value, id+1 as next_id from #tmp_table";
  626. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  627. DataSet ds = new DataSet ();
  628. da.Fill (ds);
  629. Assert.AreEqual (1, ds.Tables.Count);
  630. Assert.AreEqual (4, ds.Tables [0].Columns.Count);
  631. SqlCommandBuilder cb;
  632. cb = new SqlCommandBuilder (da);
  633. cmd = cb.GetDeleteCommand (true);
  634. Assert.AreEqual ("DELETE FROM [#tmp_table] WHERE " +
  635. "(([id] = @Original_id) AND ([counter] = @Original_counter) " +
  636. "AND ((@IsNull_value = 1 AND [value] IS NULL) " +
  637. "OR ([value] = @Original_value)))",
  638. cmd.CommandText, "#A1");
  639. Assert.AreEqual (4, cmd.Parameters.Count, "#A2");
  640. cmd = cb.GetDeleteCommand (false);
  641. Assert.AreEqual ("DELETE FROM [#tmp_table] WHERE " +
  642. "(([id] = @Original_id) AND ([counter] = @Original_counter) " +
  643. "AND ((@IsNull_value = 1 AND [value] IS NULL) " +
  644. "OR ([value] = @Original_value)))",
  645. cmd.CommandText, "#B1");
  646. Assert.AreEqual (4, cmd.Parameters.Count, "#B2");
  647. cb = new SqlCommandBuilder (da);
  648. cmd = cb.GetDeleteCommand (false);
  649. Assert.AreEqual ("DELETE FROM [#tmp_table] WHERE " +
  650. "(([id] = @p1) AND ([counter] = @p2) " +
  651. "AND ((@p3 = 1 AND [value] IS NULL) " +
  652. "OR ([value] = @p4)))",
  653. cmd.CommandText, "#C1");
  654. Assert.AreEqual (4, cmd.Parameters.Count, "#C2");
  655. cmd = cb.GetDeleteCommand (true);
  656. Assert.AreEqual ("DELETE FROM [#tmp_table] WHERE " +
  657. "(([id] = @Original_id) AND ([counter] = @Original_counter) " +
  658. "AND ((@IsNull_value = 1 AND [value] IS NULL) " +
  659. "OR ([value] = @Original_value)))",
  660. cmd.CommandText, "#D1");
  661. Assert.AreEqual (4, cmd.Parameters.Count, "#D2");
  662. } finally {
  663. if (cmd != null)
  664. cmd.Dispose ();
  665. }
  666. }
  667. [Test]
  668. public void DefaultProperties ()
  669. {
  670. SqlCommandBuilder cb = new SqlCommandBuilder ();
  671. Assert.AreEqual ("[", cb.QuotePrefix, "#5");
  672. Assert.AreEqual ("]", cb.QuoteSuffix, "#6");
  673. Assert.AreEqual (".", cb.CatalogSeparator, "#2");
  674. //Assert.AreEqual ("", cb.DecimalSeparator, "#3");
  675. Assert.AreEqual (".", cb.SchemaSeparator, "#4");
  676. Assert.AreEqual (CatalogLocation.Start, cb.CatalogLocation, "#1");
  677. Assert.AreEqual ("[monotest]", cb.QuoteIdentifier ("monotest"), "#7");
  678. Assert.AreEqual ("\"monotest\"", cb.UnquoteIdentifier ("\"monotest\""), "#8");
  679. //Assert.AreEqual (cb.ConflictOption.CompareAllSearchableValues, cb.ConflictDetection);
  680. // FIXME: test SetAllValues
  681. }
  682. // FIXME: Add tests for examining RowError
  683. // FIXME: Add test for ContinueUpdateOnError property
  684. [Test]
  685. public void CheckParameters_BuiltCommand ()
  686. {
  687. SqlDataAdapter adapter = new SqlDataAdapter ("select id,type_varchar from string_family", conn);
  688. SqlCommandBuilder cb = new SqlCommandBuilder(adapter);
  689. DataSet ds = new DataSet ();
  690. adapter.Fill(ds);
  691. Assert.AreEqual (2, cb.GetInsertCommand().Parameters.Count, "#1");
  692. DataRow row_rsInput = ds.Tables[0].NewRow();
  693. row_rsInput["id"] = 100;
  694. row_rsInput["type_varchar"] = "ttt";
  695. ds.Tables[0].Rows.Add(row_rsInput);
  696. Assert.AreEqual (2, cb.GetInsertCommand().Parameters.Count, "#2");
  697. row_rsInput = ds.Tables[0].NewRow();
  698. row_rsInput["id"] = 101;
  699. row_rsInput["type_varchar"] = "ttt";
  700. ds.Tables[0].Rows.Add(row_rsInput);
  701. Assert.AreEqual (2, cb.GetInsertCommand().Parameters.Count, "#3");
  702. }
  703. [Test]
  704. public void DeriveParameters ()
  705. {
  706. SqlCommand cmd = null;
  707. SqlParameter param;
  708. try {
  709. cmd = conn.CreateCommand ();
  710. cmd.CommandText = "sp_326182a";
  711. cmd.CommandType = CommandType.StoredProcedure;
  712. cmd.CommandTimeout = 90;
  713. cmd.Parameters.Add ("dummy", SqlDbType.Image, 5);
  714. SqlCommandBuilder.DeriveParameters (cmd);
  715. Assert.AreEqual (5, cmd.Parameters.Count, "#A1");
  716. cmd = conn.CreateCommand ();
  717. cmd.CommandText = "sp_326182b";
  718. cmd.CommandType = CommandType.StoredProcedure;
  719. cmd.CommandTimeout = 90;
  720. cmd.Parameters.Add ("dummy", SqlDbType.Image, 5);
  721. SqlCommandBuilder.DeriveParameters (cmd);
  722. Assert.AreEqual (4, cmd.Parameters.Count, "#A");
  723. param = cmd.Parameters [0];
  724. Assert.AreEqual (ParameterDirection.ReturnValue, param.Direction, "#B:Direction");
  725. Assert.IsFalse (param.IsNullable, "#B:IsNullable");
  726. if (ClientVersion == 7)
  727. Assert.AreEqual ("RETURN_VALUE", param.ParameterName, "#B:ParameterName");
  728. else
  729. Assert.AreEqual ("@RETURN_VALUE", param.ParameterName, "#B:ParameterName");
  730. Assert.AreEqual (0, param.Precision, "#B:Precision");
  731. Assert.AreEqual (0, param.Scale, "#B:Scale");
  732. //Assert.AreEqual (0, param.Size, "#B:Size");
  733. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, "#B:SqlDbType");
  734. Assert.IsNull (param.Value, "#B:Value");
  735. param = cmd.Parameters [1];
  736. Assert.AreEqual (ParameterDirection.Input, param.Direction, "#C:Direction");
  737. Assert.IsFalse (param.IsNullable, "#C:IsNullable");
  738. Assert.AreEqual ("@param0", param.ParameterName, "#C:ParameterName");
  739. Assert.AreEqual (0, param.Precision, "#C:Precision");
  740. Assert.AreEqual (0, param.Scale, "#C:Scale");
  741. //Assert.AreEqual (0, param.Size, "#C:Size");
  742. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, "#C:SqlDbType");
  743. Assert.IsNull (param.Value, "#C:Value");
  744. param = cmd.Parameters [2];
  745. Assert.AreEqual (ParameterDirection.InputOutput, param.Direction, "#D:Direction");
  746. Assert.IsFalse (param.IsNullable, "#D:IsNullable");
  747. Assert.AreEqual ("@param1", param.ParameterName, "#D:ParameterName");
  748. Assert.AreEqual (5, param.Precision, "#D:Precision");
  749. if (ClientVersion == 7)
  750. Assert.AreEqual (2, param.Scale, "#D:Scale");
  751. else
  752. Assert.AreEqual (3, param.Scale, "#D:Scale");
  753. //Assert.AreEqual (0, param.Size, "#D:Size");
  754. Assert.AreEqual (SqlDbType.Decimal, param.SqlDbType, "#D:SqlDbType");
  755. Assert.IsNull (param.Value, "#D:Value");
  756. param = cmd.Parameters [3];
  757. Assert.AreEqual (ParameterDirection.Input, param.Direction, "#E:Direction");
  758. Assert.IsFalse (param.IsNullable, "#E:IsNullable");
  759. Assert.AreEqual ("@param2", param.ParameterName, "#E:ParameterName");
  760. Assert.AreEqual (0, param.Precision, "#E:Precision");
  761. Assert.AreEqual (0, param.Scale, "#E:Scale");
  762. Assert.AreEqual (12, param.Size, "#E:Size");
  763. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, "#E:SqlDbType");
  764. Assert.IsNull (param.Value, "#E:Value");
  765. cmd.Parameters ["@param0"].Value = 5;
  766. cmd.Parameters ["@param1"].Value = 4.000m;
  767. cmd.Parameters ["@param2"].Value = DBNull.Value;
  768. cmd.ExecuteNonQuery ();
  769. if (ClientVersion == 7)
  770. Assert.AreEqual (666, cmd.Parameters ["RETURN_VALUE"].Value, "#F1");
  771. else
  772. Assert.AreEqual (666, cmd.Parameters ["@RETURN_VALUE"].Value, "#F1");
  773. Assert.AreEqual (5, cmd.Parameters ["@param0"].Value, "#F2");
  774. Assert.AreEqual (11m, cmd.Parameters ["@param1"].Value, "#F3");
  775. Assert.AreEqual (DBNull.Value, cmd.Parameters ["@param2"].Value, "#F4");
  776. } finally {
  777. if (cmd != null)
  778. cmd.Dispose ();
  779. }
  780. }
  781. [Test]
  782. public void QuotePrefix_DeleteCommand_Generated ()
  783. {
  784. SqlCommand cmd = null;
  785. try {
  786. string selectQuery = "select id, lname from employee where id = 3";
  787. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  788. DataSet ds = new DataSet ();
  789. da.Fill (ds, "IntTest");
  790. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  791. cmd = cb.GetDeleteCommand ();
  792. Assert.AreEqual ("[", cb.QuotePrefix, "#1");
  793. try {
  794. cb.QuotePrefix = "\"";
  795. Assert.Fail ("#2");
  796. } catch (InvalidOperationException ex) {
  797. // The QuotePrefix and QuoteSuffix properties
  798. // cannot be changed once an Insert, Update, or
  799. // Delete command has been generated
  800. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  801. Assert.IsNull (ex.InnerException, "#4");
  802. Assert.IsNotNull (ex.Message, "#5");
  803. }
  804. Assert.AreEqual ("[", cb.QuotePrefix, "#6");
  805. cb.RefreshSchema ();
  806. cb.QuotePrefix = "\"";
  807. } finally {
  808. if (cmd != null)
  809. cmd.Dispose ();
  810. }
  811. }
  812. [Test]
  813. public void QuotePrefix_InsertCommand_Generated ()
  814. {
  815. SqlCommand cmd = null;
  816. try {
  817. string selectQuery = "select id, lname from employee where id = 3";
  818. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  819. DataSet ds = new DataSet ();
  820. da.Fill (ds, "IntTest");
  821. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  822. cmd = cb.GetInsertCommand ();
  823. Assert.AreEqual ("[", cb.QuotePrefix, "#1");
  824. try {
  825. cb.QuotePrefix = "\"";
  826. Assert.Fail ("#2");
  827. } catch (InvalidOperationException ex) {
  828. // The QuotePrefix and QuoteSuffix properties
  829. // cannot be changed once an Insert, Update, or
  830. // Delete command has been generated
  831. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  832. Assert.IsNull (ex.InnerException, "#4");
  833. Assert.IsNotNull (ex.Message, "#5");
  834. }
  835. Assert.AreEqual ("[", cb.QuotePrefix, "#6");
  836. cb.RefreshSchema ();
  837. cb.QuotePrefix = "\"";
  838. } finally {
  839. if (cmd != null)
  840. cmd.Dispose ();
  841. }
  842. }
  843. [Test]
  844. public void QuotePrefix_UpdateCommand_Generated ()
  845. {
  846. SqlCommand cmd = null;
  847. try {
  848. string selectQuery = "select id, lname from employee where id = 3";
  849. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  850. DataSet ds = new DataSet ();
  851. da.Fill (ds, "IntTest");
  852. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  853. cmd = cb.GetUpdateCommand ();
  854. Assert.AreEqual ("[", cb.QuotePrefix, "#1");
  855. try {
  856. cb.QuotePrefix = "\"";
  857. Assert.Fail ("#2");
  858. } catch (InvalidOperationException ex) {
  859. // The QuotePrefix and QuoteSuffix properties
  860. // cannot be changed once an Insert, Update, or
  861. // Delete command has been generated
  862. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  863. Assert.IsNull (ex.InnerException, "#4");
  864. Assert.IsNotNull (ex.Message, "#5");
  865. }
  866. Assert.AreEqual ("[", cb.QuotePrefix, "#6");
  867. cb.RefreshSchema ();
  868. cb.QuotePrefix = "\"";
  869. } finally {
  870. if (cmd != null)
  871. cmd.Dispose ();
  872. }
  873. }
  874. [Test]
  875. public void QuoteSuffix_DeleteCommand_Generated ()
  876. {
  877. SqlCommand cmd = null;
  878. try {
  879. string selectQuery = "select id, lname from employee where id = 3";
  880. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  881. DataSet ds = new DataSet ();
  882. da.Fill (ds, "IntTest");
  883. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  884. cmd = cb.GetDeleteCommand ();
  885. Assert.AreEqual ("]", cb.QuoteSuffix, "#1");
  886. try {
  887. cb.QuoteSuffix = "\"";
  888. Assert.Fail ("#2");
  889. } catch (InvalidOperationException ex) {
  890. // The QuotePrefix and QuoteSuffix properties
  891. // cannot be changed once an Insert, Update, or
  892. // Delete command has been generated
  893. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  894. Assert.IsNull (ex.InnerException, "#4");
  895. Assert.IsNotNull (ex.Message, "#5");
  896. }
  897. Assert.AreEqual ("]", cb.QuoteSuffix, "#6");
  898. cb.RefreshSchema ();
  899. cb.QuoteSuffix = "\"";
  900. } finally {
  901. if (cmd != null)
  902. cmd.Dispose ();
  903. }
  904. }
  905. [Test]
  906. public void QuoteSuffix_InsertCommand_Generated ()
  907. {
  908. SqlCommand cmd = null;
  909. try {
  910. string selectQuery = "select id, lname from employee where id = 3";
  911. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  912. DataSet ds = new DataSet ();
  913. da.Fill (ds, "IntTest");
  914. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  915. cmd = cb.GetInsertCommand ();
  916. Assert.AreEqual ("]", cb.QuoteSuffix, "#1");
  917. try {
  918. cb.QuoteSuffix = "\"";
  919. Assert.Fail ("#2");
  920. } catch (InvalidOperationException ex) {
  921. // The QuotePrefix and QuoteSuffix properties
  922. // cannot be changed once an Insert, Update, or
  923. // Delete command has been generated
  924. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  925. Assert.IsNull (ex.InnerException, "#4");
  926. Assert.IsNotNull (ex.Message, "#5");
  927. }
  928. Assert.AreEqual ("]", cb.QuoteSuffix, "#6");
  929. cb.RefreshSchema ();
  930. cb.QuoteSuffix = "\"";
  931. } finally {
  932. if (cmd != null)
  933. cmd.Dispose ();
  934. }
  935. }
  936. [Test]
  937. public void QuoteSuffix_UpdateCommand_Generated ()
  938. {
  939. SqlCommand cmd = null;
  940. try {
  941. string selectQuery = "select id, lname from employee where id = 3";
  942. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  943. DataSet ds = new DataSet ();
  944. da.Fill (ds, "IntTest");
  945. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  946. cmd = cb.GetUpdateCommand ();
  947. Assert.AreEqual ("]", cb.QuoteSuffix, "#1");
  948. try {
  949. cb.QuoteSuffix = "\"";
  950. Assert.Fail ("#2");
  951. } catch (InvalidOperationException ex) {
  952. // The QuotePrefix and QuoteSuffix properties
  953. // cannot be changed once an Insert, Update, or
  954. // Delete command has been generated
  955. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  956. Assert.IsNull (ex.InnerException, "#4");
  957. Assert.IsNotNull (ex.Message, "#5");
  958. }
  959. Assert.AreEqual ("]", cb.QuoteSuffix, "#6");
  960. cb.RefreshSchema ();
  961. cb.QuoteSuffix = "\"";
  962. } finally {
  963. if (cmd != null)
  964. cmd.Dispose ();
  965. }
  966. }
  967. static void AssertDeleteParameters (SqlCommand cmd, bool useColumnsForParameterNames, string prefix)
  968. {
  969. SqlParameter param;
  970. Assert.AreEqual (4, cmd.Parameters.Count, prefix + "Count");
  971. param = cmd.Parameters [0];
  972. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (0)");
  973. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (0)");
  974. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (0)");
  975. Assert.AreEqual (0, param.Offset, prefix + "Offset (0)");
  976. if (useColumnsForParameterNames)
  977. Assert.AreEqual ("@Original_id", param.ParameterName, prefix + "ParameterName (0)");
  978. else
  979. Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
  980. if (ClientVersion > 7)
  981. Assert.AreEqual (0, param.Precision, prefix + "Precision (0)");
  982. else
  983. Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
  984. Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
  985. //Assert.AreEqual (0, param.Size, prefix + "Size (0)");
  986. Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (0)");
  987. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (0)");
  988. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (0)");
  989. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (0)");
  990. Assert.IsNull (param.SqlValue, prefix + "SqlValue (0)");
  991. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (0)");
  992. Assert.IsNull (param.Value, prefix + "Value (0)");
  993. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (0)");
  994. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (0)");
  995. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (0)");
  996. param = cmd.Parameters [1];
  997. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (2)");
  998. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (2)");
  999. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (2)");
  1000. Assert.AreEqual (0, param.Offset, prefix + "Offset (2)");
  1001. if (useColumnsForParameterNames)
  1002. Assert.AreEqual ("@Original_fname", param.ParameterName, prefix + "ParameterName (2)");
  1003. else
  1004. Assert.AreEqual ("@p2", param.ParameterName, prefix + "ParameterName (2)");
  1005. Assert.AreEqual (0, param.Precision, prefix + "Precision (2)");
  1006. Assert.AreEqual (0, param.Scale, prefix + "Scale (2)");
  1007. Assert.AreEqual (0, param.Size, prefix + "Size (2)");
  1008. Assert.AreEqual ("fname", param.SourceColumn, prefix + "SourceColumn (2)");
  1009. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (2)");
  1010. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (2)");
  1011. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (2)");
  1012. Assert.IsNull (param.SqlValue, prefix + "SqlValue (2)");
  1013. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (2)");
  1014. Assert.IsNull (param.Value, prefix + "Value (2)");
  1015. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (2)");
  1016. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (2)");
  1017. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (2)");
  1018. param = cmd.Parameters [2];
  1019. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (3)");
  1020. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (3)");
  1021. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (3)");
  1022. Assert.AreEqual (0, param.Offset, prefix + "Offset (3)");
  1023. if (useColumnsForParameterNames)
  1024. Assert.AreEqual ("@IsNull_lname", param.ParameterName, prefix + "ParameterName (3)");
  1025. else
  1026. Assert.AreEqual ("@p3", param.ParameterName, prefix + "ParameterName (3)");
  1027. Assert.AreEqual (0, param.Precision, prefix + "Precision (3)");
  1028. Assert.AreEqual (0, param.Scale, prefix + "Scale (3)");
  1029. //Assert.AreEqual (0, param.Size, prefix + "Size (3)");
  1030. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (3)");
  1031. Assert.IsTrue (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (3)");
  1032. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (3)");
  1033. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (3)");
  1034. Assert.AreEqual (new SqlInt32 (1), param.SqlValue, prefix + "SqlValue (3)");
  1035. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (3)");
  1036. Assert.AreEqual (1, param.Value, prefix + "Value (3)");
  1037. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (3)");
  1038. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (3)");
  1039. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (3)");
  1040. param = cmd.Parameters [3];
  1041. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (4)");
  1042. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (4)");
  1043. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (4)");
  1044. Assert.AreEqual (0, param.Offset, prefix + "Offset (4)");
  1045. if (useColumnsForParameterNames)
  1046. Assert.AreEqual ("@Original_lname", param.ParameterName, prefix + "ParameterName (4)");
  1047. else
  1048. Assert.AreEqual ("@p4", param.ParameterName, prefix + "ParameterName (4)");
  1049. Assert.AreEqual (0, param.Precision, prefix + "Precision (4)");
  1050. Assert.AreEqual (0, param.Scale, prefix + "Scale (4)");
  1051. Assert.AreEqual (0, param.Size, prefix + "Size (4)");
  1052. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (4)");
  1053. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (4)");
  1054. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (4)");
  1055. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (4)");
  1056. Assert.IsNull (param.SqlValue, prefix + "SqlValue (4)");
  1057. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (4)");
  1058. Assert.IsNull (param.Value, prefix + "Value (4)");
  1059. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (4)");
  1060. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (4)");
  1061. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (4)");
  1062. }
  1063. static void AssertInsertParameters (SqlCommand cmd, bool useColumnsForParameterNames, string prefix)
  1064. {
  1065. SqlParameter param;
  1066. Assert.AreEqual (3, cmd.Parameters.Count, prefix + "Count");
  1067. param = cmd.Parameters [0];
  1068. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (0)");
  1069. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (0)");
  1070. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (0)");
  1071. Assert.AreEqual (0, param.Offset, prefix + "Offset (0)");
  1072. if (useColumnsForParameterNames)
  1073. Assert.AreEqual ("@id", param.ParameterName, prefix + "ParameterName (0)");
  1074. else
  1075. Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
  1076. if (ClientVersion > 7)
  1077. Assert.AreEqual (0, param.Precision, prefix + "Precision (0)");
  1078. else
  1079. Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
  1080. Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
  1081. //Assert.AreEqual (0, param.Size, prefix + "Size (0)");
  1082. Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (0)");
  1083. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (0)");
  1084. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (0)");
  1085. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (0)");
  1086. Assert.IsNull (param.SqlValue, prefix + "SqlValue (0)");
  1087. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (0)");
  1088. Assert.IsNull (param.Value, prefix + "Value (0)");
  1089. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (0)");
  1090. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (0)");
  1091. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (0)");
  1092. param = cmd.Parameters [1];
  1093. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (1)");
  1094. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (1)");
  1095. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (1)");
  1096. Assert.AreEqual (0, param.Offset, prefix + "Offset (1)");
  1097. if (useColumnsForParameterNames)
  1098. Assert.AreEqual ("@fname", param.ParameterName, prefix + "ParameterName (1)");
  1099. else
  1100. Assert.AreEqual ("@p2", param.ParameterName, prefix + "ParameterName (1)");
  1101. Assert.AreEqual (0, param.Precision, prefix + "Precision (1)");
  1102. Assert.AreEqual (0, param.Scale, prefix + "Scale (1)");
  1103. Assert.AreEqual (0, param.Size, prefix + "Size (1)");
  1104. Assert.AreEqual ("fname", param.SourceColumn, prefix + "SourceColumn (1)");
  1105. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (1)");
  1106. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (1)");
  1107. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (1)");
  1108. Assert.IsNull (param.SqlValue, prefix + "SqlValue (1)");
  1109. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (1)");
  1110. Assert.IsNull (param.Value, prefix + "Value (1)");
  1111. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (1)");
  1112. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (1)");
  1113. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (1)");
  1114. param = cmd.Parameters [2];
  1115. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (2)");
  1116. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (2)");
  1117. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (2)");
  1118. Assert.AreEqual (0, param.Offset, prefix + "Offset (2)");
  1119. if (useColumnsForParameterNames)
  1120. Assert.AreEqual ("@lname", param.ParameterName, prefix + "ParameterName (2)");
  1121. else
  1122. Assert.AreEqual ("@p3", param.ParameterName, prefix + "ParameterName (2)");
  1123. Assert.AreEqual (0, param.Precision, prefix + "Precision (2)");
  1124. Assert.AreEqual (0, param.Scale, prefix + "Scale (2)");
  1125. Assert.AreEqual (0, param.Size, prefix + "Size (2)");
  1126. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (2)");
  1127. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (2)");
  1128. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (2)");
  1129. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (2)");
  1130. Assert.IsNull (param.SqlValue, prefix + "SqlValue (2)");
  1131. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (2)");
  1132. Assert.IsNull (param.Value, prefix + "Value (2)");
  1133. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (2)");
  1134. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (2)");
  1135. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (2)");
  1136. }
  1137. static void AssertUpdateParameters (SqlCommand cmd, bool useColumnsForParameterNames, string prefix)
  1138. {
  1139. SqlParameter param;
  1140. Assert.AreEqual (7, cmd.Parameters.Count, prefix + "Count");
  1141. param = cmd.Parameters [0];
  1142. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (0)");
  1143. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (0)");
  1144. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (0)");
  1145. Assert.AreEqual (0, param.Offset, prefix + "Offset (0)");
  1146. if (useColumnsForParameterNames)
  1147. Assert.AreEqual ("@id", param.ParameterName, prefix + "ParameterName (0)");
  1148. else
  1149. Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
  1150. if (ClientVersion > 7)
  1151. Assert.AreEqual (0, param.Precision, prefix + "Precision (0)");
  1152. else
  1153. Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
  1154. Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
  1155. //Assert.AreEqual (0, param.Size, prefix + "Size (0)");
  1156. Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (0)");
  1157. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (0)");
  1158. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (0)");
  1159. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (0)");
  1160. Assert.IsNull (param.SqlValue, prefix + "SqlValue (0)");
  1161. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (0)");
  1162. Assert.IsNull (param.Value, prefix + "Value (0)");
  1163. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (0)");
  1164. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (0)");
  1165. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (0)");
  1166. param = cmd.Parameters [1];
  1167. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (1)");
  1168. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (1)");
  1169. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (1)");
  1170. Assert.AreEqual (0, param.Offset, prefix + "Offset (1)");
  1171. if (useColumnsForParameterNames)
  1172. Assert.AreEqual ("@fname", param.ParameterName, prefix + "ParameterName (1)");
  1173. else
  1174. Assert.AreEqual ("@p2", param.ParameterName, prefix + "ParameterName (1)");
  1175. Assert.AreEqual (0, param.Precision, prefix + "Precision (1)");
  1176. Assert.AreEqual (0, param.Scale, prefix + "Scale (1)");
  1177. //Assert.AreEqual (0, param.Size, prefix + "Size (1)");
  1178. Assert.AreEqual ("fname", param.SourceColumn, prefix + "SourceColumn (1)");
  1179. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (1)");
  1180. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (1)");
  1181. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (1)");
  1182. Assert.IsNull (param.SqlValue, prefix + "SqlValue (1)");
  1183. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (1)");
  1184. Assert.IsNull (param.Value, prefix + "Value (1)");
  1185. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (1)");
  1186. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (1)");
  1187. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (1)");
  1188. param = cmd.Parameters [2];
  1189. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (2)");
  1190. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (2)");
  1191. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (2)");
  1192. Assert.AreEqual (0, param.Offset, prefix + "Offset (2)");
  1193. if (useColumnsForParameterNames)
  1194. Assert.AreEqual ("@lname", param.ParameterName, prefix + "ParameterName (2)");
  1195. else
  1196. Assert.AreEqual ("@p3", param.ParameterName, prefix + "ParameterName (2)");
  1197. Assert.AreEqual (0, param.Precision, prefix + "Precision (2)");
  1198. Assert.AreEqual (0, param.Scale, prefix + "Scale (2)");
  1199. Assert.AreEqual (0, param.Size, prefix + "Size (2)");
  1200. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (2)");
  1201. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (2)");
  1202. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (2)");
  1203. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (2)");
  1204. Assert.IsNull (param.SqlValue, prefix + "SqlValue (2)");
  1205. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (2)");
  1206. Assert.IsNull (param.Value, prefix + "Value (2)");
  1207. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (2)");
  1208. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (2)");
  1209. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (2)");
  1210. param = cmd.Parameters [3];
  1211. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (3)");
  1212. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (3)");
  1213. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (3)");
  1214. Assert.AreEqual (0, param.Offset, prefix + "Offset (3)");
  1215. if (useColumnsForParameterNames)
  1216. Assert.AreEqual ("@Original_id", param.ParameterName, prefix + "ParameterName (3)");
  1217. else
  1218. Assert.AreEqual ("@p4", param.ParameterName, prefix + "ParameterName (3)");
  1219. if (ClientVersion > 7)
  1220. Assert.AreEqual (0, param.Precision, prefix + "Precision (0)");
  1221. else
  1222. Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
  1223. Assert.AreEqual (0, param.Scale, prefix + "Scale (3)");
  1224. //Assert.AreEqual (0, param.Size, prefix + "Size (3)");
  1225. Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (3)");
  1226. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (3)");
  1227. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (3)");
  1228. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (3)");
  1229. Assert.IsNull (param.SqlValue, prefix + "SqlValue (3)");
  1230. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (3)");
  1231. Assert.IsNull (param.Value, prefix + "Value (3)");
  1232. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (3)");
  1233. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (3)");
  1234. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (3)");
  1235. param = cmd.Parameters [4];
  1236. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (5)");
  1237. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (5)");
  1238. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (5)");
  1239. Assert.AreEqual (0, param.Offset, prefix + "Offset (5)");
  1240. if (useColumnsForParameterNames)
  1241. Assert.AreEqual ("@Original_fname", param.ParameterName, prefix + "ParameterName (5)");
  1242. else
  1243. Assert.AreEqual ("@p5", param.ParameterName, prefix + "ParameterName (5)");
  1244. Assert.AreEqual (0, param.Precision, prefix + "Precision (5)");
  1245. Assert.AreEqual (0, param.Scale, prefix + "Scale (5)");
  1246. Assert.AreEqual (0, param.Size, prefix + "Size (5)");
  1247. Assert.AreEqual ("fname", param.SourceColumn, prefix + "SourceColumn (5)");
  1248. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (5)");
  1249. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (5)");
  1250. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (5)");
  1251. Assert.IsNull (param.SqlValue, prefix + "SqlValue (5)");
  1252. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (5)");
  1253. Assert.IsNull (param.Value, prefix + "Value (5)");
  1254. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (5)");
  1255. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (5)");
  1256. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (5)");
  1257. param = cmd.Parameters [5];
  1258. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (6)");
  1259. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (6)");
  1260. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (6)");
  1261. Assert.AreEqual (0, param.Offset, prefix + "Offset (6)");
  1262. if (useColumnsForParameterNames)
  1263. Assert.AreEqual ("@IsNull_lname", param.ParameterName, prefix + "ParameterName (6)");
  1264. else
  1265. Assert.AreEqual ("@p6", param.ParameterName, prefix + "ParameterName (6)");
  1266. Assert.AreEqual (0, param.Precision, prefix + "Precision (6)");
  1267. Assert.AreEqual (0, param.Scale, prefix + "Scale (6)");
  1268. //Assert.AreEqual (0, param.Size, prefix + "Size (6)");
  1269. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (6)");
  1270. Assert.IsTrue (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (6)");
  1271. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (6)");
  1272. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (6)");
  1273. Assert.AreEqual (new SqlInt32 (1), param.SqlValue, prefix + "SqlValue (6)");
  1274. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (6)");
  1275. Assert.AreEqual (1, param.Value, prefix + "Value (6)");
  1276. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (6)");
  1277. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (6)");
  1278. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (6)");
  1279. param = cmd.Parameters [6];
  1280. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (7)");
  1281. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (7)");
  1282. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (7)");
  1283. Assert.AreEqual (0, param.Offset, prefix + "Offset (7)");
  1284. if (useColumnsForParameterNames)
  1285. Assert.AreEqual ("@Original_lname", param.ParameterName, prefix + "ParameterName (7)");
  1286. else
  1287. Assert.AreEqual ("@p7", param.ParameterName, prefix + "ParameterName (7)");
  1288. Assert.AreEqual (0, param.Precision, prefix + "Precision (7)");
  1289. Assert.AreEqual (0, param.Scale, prefix + "Scale (7)");
  1290. Assert.AreEqual (0, param.Size, prefix + "Size (7)");
  1291. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (7)");
  1292. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (7)");
  1293. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (7)");
  1294. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (7)");
  1295. Assert.IsNull (param.SqlValue, prefix + "SqlValue (7)");
  1296. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (7)");
  1297. Assert.IsNull (param.Value, prefix + "Value (7)");
  1298. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (7)");
  1299. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (7)");
  1300. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (7)");
  1301. }
  1302. static int ClientVersion {
  1303. get {
  1304. return (SqlCommandBuilderTest.Engine.ClientVersion);
  1305. }
  1306. }
  1307. }
  1308. }