SqlCommandBuilderTest.cs 60 KB

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