SqlCommandBuilderTest.cs 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464
  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. [Category("NotWorking")]
  695. public void CheckParameters_BuiltCommand ()
  696. {
  697. SqlDataAdapter adapter = new SqlDataAdapter ("select id,type_varchar from string_family", conn);
  698. SqlCommandBuilder cb = new SqlCommandBuilder(adapter);
  699. DataSet ds = new DataSet ();
  700. adapter.Fill(ds);
  701. Assert.AreEqual (2, cb.GetInsertCommand().Parameters.Count, "#1");
  702. DataRow row_rsInput = ds.Tables[0].NewRow();
  703. row_rsInput["id"] = 100;
  704. row_rsInput["type_varchar"] = "ttt";
  705. ds.Tables[0].Rows.Add(row_rsInput);
  706. Assert.AreEqual (2, cb.GetInsertCommand().Parameters.Count, "#2");
  707. row_rsInput = ds.Tables[0].NewRow();
  708. row_rsInput["id"] = 101;
  709. row_rsInput["type_varchar"] = "ttt";
  710. ds.Tables[0].Rows.Add(row_rsInput);
  711. Assert.AreEqual (2, cb.GetInsertCommand().Parameters.Count, "#3");
  712. }
  713. [Test]
  714. [Category("NotWorking")]
  715. public void DeriveParameters ()
  716. {
  717. SqlCommand cmd = null;
  718. SqlParameter param;
  719. try {
  720. cmd = conn.CreateCommand ();
  721. cmd.CommandText = "sp_326182a";
  722. cmd.CommandType = CommandType.StoredProcedure;
  723. cmd.CommandTimeout = 90;
  724. cmd.Parameters.Add ("dummy", SqlDbType.Image, 5);
  725. SqlCommandBuilder.DeriveParameters (cmd);
  726. Assert.AreEqual (5, cmd.Parameters.Count, "#A1");
  727. cmd = conn.CreateCommand ();
  728. cmd.CommandText = "sp_326182b";
  729. cmd.CommandType = CommandType.StoredProcedure;
  730. cmd.CommandTimeout = 90;
  731. cmd.Parameters.Add ("dummy", SqlDbType.Image, 5);
  732. SqlCommandBuilder.DeriveParameters (cmd);
  733. Assert.AreEqual (4, cmd.Parameters.Count, "#A");
  734. param = cmd.Parameters [0];
  735. Assert.AreEqual (ParameterDirection.ReturnValue, param.Direction, "#B:Direction");
  736. Assert.IsFalse (param.IsNullable, "#B:IsNullable");
  737. if (ClientVersion == 7)
  738. Assert.AreEqual ("RETURN_VALUE", param.ParameterName, "#B:ParameterName");
  739. else
  740. Assert.AreEqual ("@RETURN_VALUE", param.ParameterName, "#B:ParameterName");
  741. Assert.AreEqual (0, param.Precision, "#B:Precision");
  742. Assert.AreEqual (0, param.Scale, "#B:Scale");
  743. //Assert.AreEqual (0, param.Size, "#B:Size");
  744. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, "#B:SqlDbType");
  745. Assert.IsNull (param.Value, "#B:Value");
  746. param = cmd.Parameters [1];
  747. Assert.AreEqual (ParameterDirection.Input, param.Direction, "#C:Direction");
  748. Assert.IsFalse (param.IsNullable, "#C:IsNullable");
  749. Assert.AreEqual ("@param0", param.ParameterName, "#C:ParameterName");
  750. Assert.AreEqual (0, param.Precision, "#C:Precision");
  751. Assert.AreEqual (0, param.Scale, "#C:Scale");
  752. //Assert.AreEqual (0, param.Size, "#C:Size");
  753. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, "#C:SqlDbType");
  754. Assert.IsNull (param.Value, "#C:Value");
  755. param = cmd.Parameters [2];
  756. Assert.AreEqual (ParameterDirection.InputOutput, param.Direction, "#D:Direction");
  757. Assert.IsFalse (param.IsNullable, "#D:IsNullable");
  758. Assert.AreEqual ("@param1", param.ParameterName, "#D:ParameterName");
  759. Assert.AreEqual (5, param.Precision, "#D:Precision");
  760. Assert.AreEqual (2, param.Scale, "#D:Scale");
  761. //Assert.AreEqual (0, param.Size, "#D:Size");
  762. Assert.AreEqual (SqlDbType.Decimal, param.SqlDbType, "#D:SqlDbType");
  763. Assert.IsNull (param.Value, "#D:Value");
  764. param = cmd.Parameters [3];
  765. Assert.AreEqual (ParameterDirection.Input, param.Direction, "#E:Direction");
  766. Assert.IsFalse (param.IsNullable, "#E:IsNullable");
  767. Assert.AreEqual ("@param2", param.ParameterName, "#E:ParameterName");
  768. Assert.AreEqual (0, param.Precision, "#E:Precision");
  769. Assert.AreEqual (0, param.Scale, "#E:Scale");
  770. Assert.AreEqual (12, param.Size, "#E:Size");
  771. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, "#E:SqlDbType");
  772. Assert.IsNull (param.Value, "#E:Value");
  773. cmd.Parameters ["@param0"].Value = 5;
  774. cmd.Parameters ["@param1"].Value = 4.000m;
  775. cmd.Parameters ["@param2"].Value = DBNull.Value;
  776. cmd.ExecuteNonQuery ();
  777. if (ClientVersion == 7)
  778. Assert.AreEqual (666, cmd.Parameters ["RETURN_VALUE"].Value, "#F1");
  779. else
  780. Assert.AreEqual (666, cmd.Parameters ["@RETURN_VALUE"].Value, "#F1");
  781. Assert.AreEqual (5, cmd.Parameters ["@param0"].Value, "#F2");
  782. Assert.AreEqual (11m, cmd.Parameters ["@param1"].Value, "#F3");
  783. Assert.AreEqual (DBNull.Value, cmd.Parameters ["@param2"].Value, "#F4");
  784. } finally {
  785. if (cmd != null)
  786. cmd.Dispose ();
  787. }
  788. }
  789. [Test]
  790. public void QuotePrefix_DeleteCommand_Generated ()
  791. {
  792. SqlCommand cmd = null;
  793. try {
  794. string selectQuery = "select id, lname from employee where id = 3";
  795. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  796. DataSet ds = new DataSet ();
  797. da.Fill (ds, "IntTest");
  798. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  799. cmd = cb.GetDeleteCommand ();
  800. Assert.AreEqual ("[", cb.QuotePrefix, "#1");
  801. try {
  802. cb.QuotePrefix = "\"";
  803. Assert.Fail ("#2");
  804. } catch (InvalidOperationException ex) {
  805. // The QuotePrefix and QuoteSuffix properties
  806. // cannot be changed once an Insert, Update, or
  807. // Delete command has been generated
  808. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  809. Assert.IsNull (ex.InnerException, "#4");
  810. Assert.IsNotNull (ex.Message, "#5");
  811. }
  812. Assert.AreEqual ("[", cb.QuotePrefix, "#6");
  813. cb.RefreshSchema ();
  814. cb.QuotePrefix = "\"";
  815. } finally {
  816. if (cmd != null)
  817. cmd.Dispose ();
  818. }
  819. }
  820. [Test]
  821. public void QuotePrefix_InsertCommand_Generated ()
  822. {
  823. SqlCommand cmd = null;
  824. try {
  825. string selectQuery = "select id, lname from employee where id = 3";
  826. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  827. DataSet ds = new DataSet ();
  828. da.Fill (ds, "IntTest");
  829. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  830. cmd = cb.GetInsertCommand ();
  831. Assert.AreEqual ("[", cb.QuotePrefix, "#1");
  832. try {
  833. cb.QuotePrefix = "\"";
  834. Assert.Fail ("#2");
  835. } catch (InvalidOperationException ex) {
  836. // The QuotePrefix and QuoteSuffix properties
  837. // cannot be changed once an Insert, Update, or
  838. // Delete command has been generated
  839. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  840. Assert.IsNull (ex.InnerException, "#4");
  841. Assert.IsNotNull (ex.Message, "#5");
  842. }
  843. Assert.AreEqual ("[", cb.QuotePrefix, "#6");
  844. cb.RefreshSchema ();
  845. cb.QuotePrefix = "\"";
  846. } finally {
  847. if (cmd != null)
  848. cmd.Dispose ();
  849. }
  850. }
  851. [Test]
  852. public void QuotePrefix_UpdateCommand_Generated ()
  853. {
  854. SqlCommand cmd = null;
  855. try {
  856. string selectQuery = "select id, lname from employee where id = 3";
  857. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  858. DataSet ds = new DataSet ();
  859. da.Fill (ds, "IntTest");
  860. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  861. cmd = cb.GetUpdateCommand ();
  862. Assert.AreEqual ("[", cb.QuotePrefix, "#1");
  863. try {
  864. cb.QuotePrefix = "\"";
  865. Assert.Fail ("#2");
  866. } catch (InvalidOperationException ex) {
  867. // The QuotePrefix and QuoteSuffix properties
  868. // cannot be changed once an Insert, Update, or
  869. // Delete command has been generated
  870. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  871. Assert.IsNull (ex.InnerException, "#4");
  872. Assert.IsNotNull (ex.Message, "#5");
  873. }
  874. Assert.AreEqual ("[", cb.QuotePrefix, "#6");
  875. cb.RefreshSchema ();
  876. cb.QuotePrefix = "\"";
  877. } finally {
  878. if (cmd != null)
  879. cmd.Dispose ();
  880. }
  881. }
  882. [Test]
  883. public void QuoteSuffix_DeleteCommand_Generated ()
  884. {
  885. SqlCommand cmd = null;
  886. try {
  887. string selectQuery = "select id, lname from employee where id = 3";
  888. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  889. DataSet ds = new DataSet ();
  890. da.Fill (ds, "IntTest");
  891. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  892. cmd = cb.GetDeleteCommand ();
  893. Assert.AreEqual ("]", cb.QuoteSuffix, "#1");
  894. try {
  895. cb.QuoteSuffix = "\"";
  896. Assert.Fail ("#2");
  897. } catch (InvalidOperationException ex) {
  898. // The QuotePrefix and QuoteSuffix properties
  899. // cannot be changed once an Insert, Update, or
  900. // Delete command has been generated
  901. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  902. Assert.IsNull (ex.InnerException, "#4");
  903. Assert.IsNotNull (ex.Message, "#5");
  904. }
  905. Assert.AreEqual ("]", cb.QuoteSuffix, "#6");
  906. cb.RefreshSchema ();
  907. cb.QuoteSuffix = "\"";
  908. } finally {
  909. if (cmd != null)
  910. cmd.Dispose ();
  911. }
  912. }
  913. [Test]
  914. public void QuoteSuffix_InsertCommand_Generated ()
  915. {
  916. SqlCommand cmd = null;
  917. try {
  918. string selectQuery = "select id, lname from employee where id = 3";
  919. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  920. DataSet ds = new DataSet ();
  921. da.Fill (ds, "IntTest");
  922. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  923. cmd = cb.GetInsertCommand ();
  924. Assert.AreEqual ("]", cb.QuoteSuffix, "#1");
  925. try {
  926. cb.QuoteSuffix = "\"";
  927. Assert.Fail ("#2");
  928. } catch (InvalidOperationException ex) {
  929. // The QuotePrefix and QuoteSuffix properties
  930. // cannot be changed once an Insert, Update, or
  931. // Delete command has been generated
  932. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  933. Assert.IsNull (ex.InnerException, "#4");
  934. Assert.IsNotNull (ex.Message, "#5");
  935. }
  936. Assert.AreEqual ("]", cb.QuoteSuffix, "#6");
  937. cb.RefreshSchema ();
  938. cb.QuoteSuffix = "\"";
  939. } finally {
  940. if (cmd != null)
  941. cmd.Dispose ();
  942. }
  943. }
  944. [Test]
  945. public void QuoteSuffix_UpdateCommand_Generated ()
  946. {
  947. SqlCommand cmd = null;
  948. try {
  949. string selectQuery = "select id, lname from employee where id = 3";
  950. SqlDataAdapter da = new SqlDataAdapter (selectQuery, conn);
  951. DataSet ds = new DataSet ();
  952. da.Fill (ds, "IntTest");
  953. SqlCommandBuilder cb = new SqlCommandBuilder (da);
  954. cmd = cb.GetUpdateCommand ();
  955. Assert.AreEqual ("]", cb.QuoteSuffix, "#1");
  956. try {
  957. cb.QuoteSuffix = "\"";
  958. Assert.Fail ("#2");
  959. } catch (InvalidOperationException ex) {
  960. // The QuotePrefix and QuoteSuffix properties
  961. // cannot be changed once an Insert, Update, or
  962. // Delete command has been generated
  963. Assert.AreEqual (typeof (InvalidOperationException), ex.GetType (), "#3");
  964. Assert.IsNull (ex.InnerException, "#4");
  965. Assert.IsNotNull (ex.Message, "#5");
  966. }
  967. Assert.AreEqual ("]", cb.QuoteSuffix, "#6");
  968. cb.RefreshSchema ();
  969. cb.QuoteSuffix = "\"";
  970. } finally {
  971. if (cmd != null)
  972. cmd.Dispose ();
  973. }
  974. }
  975. static void AssertDeleteParameters (SqlCommand cmd, bool useColumnsForParameterNames, string prefix)
  976. {
  977. SqlParameter param;
  978. Assert.AreEqual (4, cmd.Parameters.Count, prefix + "Count");
  979. param = cmd.Parameters [0];
  980. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (0)");
  981. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (0)");
  982. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (0)");
  983. Assert.AreEqual (0, param.Offset, prefix + "Offset (0)");
  984. if (useColumnsForParameterNames)
  985. Assert.AreEqual ("@Original_id", param.ParameterName, prefix + "ParameterName (0)");
  986. else
  987. Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
  988. Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
  989. Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
  990. //Assert.AreEqual (0, param.Size, prefix + "Size (0)");
  991. Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (0)");
  992. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (0)");
  993. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (0)");
  994. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (0)");
  995. Assert.IsNull (param.SqlValue, prefix + "SqlValue (0)");
  996. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (0)");
  997. Assert.IsNull (param.Value, prefix + "Value (0)");
  998. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (0)");
  999. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (0)");
  1000. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (0)");
  1001. param = cmd.Parameters [1];
  1002. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (2)");
  1003. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (2)");
  1004. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (2)");
  1005. Assert.AreEqual (0, param.Offset, prefix + "Offset (2)");
  1006. if (useColumnsForParameterNames)
  1007. Assert.AreEqual ("@Original_fname", param.ParameterName, prefix + "ParameterName (2)");
  1008. else
  1009. Assert.AreEqual ("@p2", param.ParameterName, prefix + "ParameterName (2)");
  1010. Assert.AreEqual (0, param.Precision, prefix + "Precision (2)");
  1011. Assert.AreEqual (0, param.Scale, prefix + "Scale (2)");
  1012. Assert.AreEqual (0, param.Size, prefix + "Size (2)");
  1013. Assert.AreEqual ("fname", param.SourceColumn, prefix + "SourceColumn (2)");
  1014. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (2)");
  1015. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (2)");
  1016. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (2)");
  1017. Assert.IsNull (param.SqlValue, prefix + "SqlValue (2)");
  1018. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (2)");
  1019. Assert.IsNull (param.Value, prefix + "Value (2)");
  1020. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (2)");
  1021. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (2)");
  1022. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (2)");
  1023. param = cmd.Parameters [2];
  1024. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (3)");
  1025. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (3)");
  1026. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (3)");
  1027. Assert.AreEqual (0, param.Offset, prefix + "Offset (3)");
  1028. if (useColumnsForParameterNames)
  1029. Assert.AreEqual ("@IsNull_lname", param.ParameterName, prefix + "ParameterName (3)");
  1030. else
  1031. Assert.AreEqual ("@p3", param.ParameterName, prefix + "ParameterName (3)");
  1032. Assert.AreEqual (0, param.Precision, prefix + "Precision (3)");
  1033. Assert.AreEqual (0, param.Scale, prefix + "Scale (3)");
  1034. //Assert.AreEqual (0, param.Size, prefix + "Size (3)");
  1035. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (3)");
  1036. Assert.IsTrue (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (3)");
  1037. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (3)");
  1038. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (3)");
  1039. Assert.AreEqual (new SqlInt32 (1), param.SqlValue, prefix + "SqlValue (3)");
  1040. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (3)");
  1041. Assert.AreEqual (1, param.Value, prefix + "Value (3)");
  1042. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (3)");
  1043. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (3)");
  1044. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (3)");
  1045. param = cmd.Parameters [3];
  1046. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (4)");
  1047. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (4)");
  1048. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (4)");
  1049. Assert.AreEqual (0, param.Offset, prefix + "Offset (4)");
  1050. if (useColumnsForParameterNames)
  1051. Assert.AreEqual ("@Original_lname", param.ParameterName, prefix + "ParameterName (4)");
  1052. else
  1053. Assert.AreEqual ("@p4", param.ParameterName, prefix + "ParameterName (4)");
  1054. Assert.AreEqual (0, param.Precision, prefix + "Precision (4)");
  1055. Assert.AreEqual (0, param.Scale, prefix + "Scale (4)");
  1056. Assert.AreEqual (0, param.Size, prefix + "Size (4)");
  1057. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (4)");
  1058. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (4)");
  1059. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (4)");
  1060. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (4)");
  1061. Assert.IsNull (param.SqlValue, prefix + "SqlValue (4)");
  1062. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (4)");
  1063. Assert.IsNull (param.Value, prefix + "Value (4)");
  1064. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (4)");
  1065. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (4)");
  1066. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (4)");
  1067. }
  1068. static void AssertInsertParameters (SqlCommand cmd, bool useColumnsForParameterNames, string prefix)
  1069. {
  1070. SqlParameter param;
  1071. Assert.AreEqual (3, cmd.Parameters.Count, prefix + "Count");
  1072. param = cmd.Parameters [0];
  1073. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (0)");
  1074. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (0)");
  1075. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (0)");
  1076. Assert.AreEqual (0, param.Offset, prefix + "Offset (0)");
  1077. if (useColumnsForParameterNames)
  1078. Assert.AreEqual ("@id", param.ParameterName, prefix + "ParameterName (0)");
  1079. else
  1080. Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
  1081. Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
  1082. Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
  1083. //Assert.AreEqual (0, param.Size, prefix + "Size (0)");
  1084. Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (0)");
  1085. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (0)");
  1086. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (0)");
  1087. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (0)");
  1088. Assert.IsNull (param.SqlValue, prefix + "SqlValue (0)");
  1089. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (0)");
  1090. Assert.IsNull (param.Value, prefix + "Value (0)");
  1091. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (0)");
  1092. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (0)");
  1093. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (0)");
  1094. param = cmd.Parameters [1];
  1095. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (1)");
  1096. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (1)");
  1097. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (1)");
  1098. Assert.AreEqual (0, param.Offset, prefix + "Offset (1)");
  1099. if (useColumnsForParameterNames)
  1100. Assert.AreEqual ("@fname", param.ParameterName, prefix + "ParameterName (1)");
  1101. else
  1102. Assert.AreEqual ("@p2", param.ParameterName, prefix + "ParameterName (1)");
  1103. Assert.AreEqual (0, param.Precision, prefix + "Precision (1)");
  1104. Assert.AreEqual (0, param.Scale, prefix + "Scale (1)");
  1105. Assert.AreEqual (0, param.Size, prefix + "Size (1)");
  1106. Assert.AreEqual ("fname", param.SourceColumn, prefix + "SourceColumn (1)");
  1107. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (1)");
  1108. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (1)");
  1109. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (1)");
  1110. Assert.IsNull (param.SqlValue, prefix + "SqlValue (1)");
  1111. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (1)");
  1112. Assert.IsNull (param.Value, prefix + "Value (1)");
  1113. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (1)");
  1114. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (1)");
  1115. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (1)");
  1116. param = cmd.Parameters [2];
  1117. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (2)");
  1118. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (2)");
  1119. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (2)");
  1120. Assert.AreEqual (0, param.Offset, prefix + "Offset (2)");
  1121. if (useColumnsForParameterNames)
  1122. Assert.AreEqual ("@lname", param.ParameterName, prefix + "ParameterName (2)");
  1123. else
  1124. Assert.AreEqual ("@p3", param.ParameterName, prefix + "ParameterName (2)");
  1125. Assert.AreEqual (0, param.Precision, prefix + "Precision (2)");
  1126. Assert.AreEqual (0, param.Scale, prefix + "Scale (2)");
  1127. Assert.AreEqual (0, param.Size, prefix + "Size (2)");
  1128. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (2)");
  1129. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (2)");
  1130. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (2)");
  1131. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (2)");
  1132. Assert.IsNull (param.SqlValue, prefix + "SqlValue (2)");
  1133. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (2)");
  1134. Assert.IsNull (param.Value, prefix + "Value (2)");
  1135. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (2)");
  1136. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (2)");
  1137. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (2)");
  1138. }
  1139. static void AssertUpdateParameters (SqlCommand cmd, bool useColumnsForParameterNames, string prefix)
  1140. {
  1141. SqlParameter param;
  1142. Assert.AreEqual (7, cmd.Parameters.Count, prefix + "Count");
  1143. param = cmd.Parameters [0];
  1144. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (0)");
  1145. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (0)");
  1146. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (0)");
  1147. Assert.AreEqual (0, param.Offset, prefix + "Offset (0)");
  1148. if (useColumnsForParameterNames)
  1149. Assert.AreEqual ("@id", param.ParameterName, prefix + "ParameterName (0)");
  1150. else
  1151. Assert.AreEqual ("@p1", param.ParameterName, prefix + "ParameterName (0)");
  1152. Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
  1153. Assert.AreEqual (0, param.Scale, prefix + "Scale (0)");
  1154. //Assert.AreEqual (0, param.Size, prefix + "Size (0)");
  1155. Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (0)");
  1156. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (0)");
  1157. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (0)");
  1158. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (0)");
  1159. Assert.IsNull (param.SqlValue, prefix + "SqlValue (0)");
  1160. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (0)");
  1161. Assert.IsNull (param.Value, prefix + "Value (0)");
  1162. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (0)");
  1163. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (0)");
  1164. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (0)");
  1165. param = cmd.Parameters [1];
  1166. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (1)");
  1167. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (1)");
  1168. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (1)");
  1169. Assert.AreEqual (0, param.Offset, prefix + "Offset (1)");
  1170. if (useColumnsForParameterNames)
  1171. Assert.AreEqual ("@fname", param.ParameterName, prefix + "ParameterName (1)");
  1172. else
  1173. Assert.AreEqual ("@p2", param.ParameterName, prefix + "ParameterName (1)");
  1174. Assert.AreEqual (0, param.Precision, prefix + "Precision (1)");
  1175. Assert.AreEqual (0, param.Scale, prefix + "Scale (1)");
  1176. //Assert.AreEqual (0, param.Size, prefix + "Size (1)");
  1177. Assert.AreEqual ("fname", param.SourceColumn, prefix + "SourceColumn (1)");
  1178. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (1)");
  1179. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (1)");
  1180. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (1)");
  1181. Assert.IsNull (param.SqlValue, prefix + "SqlValue (1)");
  1182. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (1)");
  1183. Assert.IsNull (param.Value, prefix + "Value (1)");
  1184. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (1)");
  1185. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (1)");
  1186. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (1)");
  1187. param = cmd.Parameters [2];
  1188. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (2)");
  1189. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (2)");
  1190. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (2)");
  1191. Assert.AreEqual (0, param.Offset, prefix + "Offset (2)");
  1192. if (useColumnsForParameterNames)
  1193. Assert.AreEqual ("@lname", param.ParameterName, prefix + "ParameterName (2)");
  1194. else
  1195. Assert.AreEqual ("@p3", param.ParameterName, prefix + "ParameterName (2)");
  1196. Assert.AreEqual (0, param.Precision, prefix + "Precision (2)");
  1197. Assert.AreEqual (0, param.Scale, prefix + "Scale (2)");
  1198. Assert.AreEqual (0, param.Size, prefix + "Size (2)");
  1199. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (2)");
  1200. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (2)");
  1201. Assert.AreEqual (DataRowVersion.Current, param.SourceVersion, prefix + "SourceVersion (2)");
  1202. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (2)");
  1203. Assert.IsNull (param.SqlValue, prefix + "SqlValue (2)");
  1204. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (2)");
  1205. Assert.IsNull (param.Value, prefix + "Value (2)");
  1206. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (2)");
  1207. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (2)");
  1208. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (2)");
  1209. param = cmd.Parameters [3];
  1210. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (3)");
  1211. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (3)");
  1212. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (3)");
  1213. Assert.AreEqual (0, param.Offset, prefix + "Offset (3)");
  1214. if (useColumnsForParameterNames)
  1215. Assert.AreEqual ("@Original_id", param.ParameterName, prefix + "ParameterName (3)");
  1216. else
  1217. Assert.AreEqual ("@p4", param.ParameterName, prefix + "ParameterName (3)");
  1218. Assert.AreEqual (10, param.Precision, prefix + "Precision (0)");
  1219. Assert.AreEqual (0, param.Scale, prefix + "Scale (3)");
  1220. //Assert.AreEqual (0, param.Size, prefix + "Size (3)");
  1221. Assert.AreEqual ("id", param.SourceColumn, prefix + "SourceColumn (3)");
  1222. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (3)");
  1223. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (3)");
  1224. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (3)");
  1225. Assert.IsNull (param.SqlValue, prefix + "SqlValue (3)");
  1226. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (3)");
  1227. Assert.IsNull (param.Value, prefix + "Value (3)");
  1228. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (3)");
  1229. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (3)");
  1230. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (3)");
  1231. param = cmd.Parameters [4];
  1232. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (5)");
  1233. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (5)");
  1234. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (5)");
  1235. Assert.AreEqual (0, param.Offset, prefix + "Offset (5)");
  1236. if (useColumnsForParameterNames)
  1237. Assert.AreEqual ("@Original_fname", param.ParameterName, prefix + "ParameterName (5)");
  1238. else
  1239. Assert.AreEqual ("@p5", param.ParameterName, prefix + "ParameterName (5)");
  1240. Assert.AreEqual (0, param.Precision, prefix + "Precision (5)");
  1241. Assert.AreEqual (0, param.Scale, prefix + "Scale (5)");
  1242. Assert.AreEqual (0, param.Size, prefix + "Size (5)");
  1243. Assert.AreEqual ("fname", param.SourceColumn, prefix + "SourceColumn (5)");
  1244. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (5)");
  1245. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (5)");
  1246. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (5)");
  1247. Assert.IsNull (param.SqlValue, prefix + "SqlValue (5)");
  1248. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (5)");
  1249. Assert.IsNull (param.Value, prefix + "Value (5)");
  1250. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (5)");
  1251. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (5)");
  1252. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (5)");
  1253. param = cmd.Parameters [5];
  1254. Assert.AreEqual (DbType.Int32, param.DbType, prefix + "DbType (6)");
  1255. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (6)");
  1256. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (6)");
  1257. Assert.AreEqual (0, param.Offset, prefix + "Offset (6)");
  1258. if (useColumnsForParameterNames)
  1259. Assert.AreEqual ("@IsNull_lname", param.ParameterName, prefix + "ParameterName (6)");
  1260. else
  1261. Assert.AreEqual ("@p6", param.ParameterName, prefix + "ParameterName (6)");
  1262. Assert.AreEqual (0, param.Precision, prefix + "Precision (6)");
  1263. Assert.AreEqual (0, param.Scale, prefix + "Scale (6)");
  1264. //Assert.AreEqual (0, param.Size, prefix + "Size (6)");
  1265. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (6)");
  1266. Assert.IsTrue (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (6)");
  1267. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (6)");
  1268. Assert.AreEqual (SqlDbType.Int, param.SqlDbType, prefix + "SqlDbType (6)");
  1269. Assert.AreEqual (new SqlInt32 (1), param.SqlValue, prefix + "SqlValue (6)");
  1270. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (6)");
  1271. Assert.AreEqual (1, param.Value, prefix + "Value (6)");
  1272. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (6)");
  1273. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (6)");
  1274. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (6)");
  1275. param = cmd.Parameters [6];
  1276. Assert.AreEqual (DbType.AnsiString, param.DbType, prefix + "DbType (7)");
  1277. Assert.AreEqual (ParameterDirection.Input, param.Direction, prefix + "Direction (7)");
  1278. Assert.IsFalse (param.IsNullable, prefix + "IsNullable (7)");
  1279. Assert.AreEqual (0, param.Offset, prefix + "Offset (7)");
  1280. if (useColumnsForParameterNames)
  1281. Assert.AreEqual ("@Original_lname", param.ParameterName, prefix + "ParameterName (7)");
  1282. else
  1283. Assert.AreEqual ("@p7", param.ParameterName, prefix + "ParameterName (7)");
  1284. Assert.AreEqual (0, param.Precision, prefix + "Precision (7)");
  1285. Assert.AreEqual (0, param.Scale, prefix + "Scale (7)");
  1286. Assert.AreEqual (0, param.Size, prefix + "Size (7)");
  1287. Assert.AreEqual ("lname", param.SourceColumn, prefix + "SourceColumn (7)");
  1288. Assert.IsFalse (param.SourceColumnNullMapping, prefix + "SourceColumnNullMapping (7)");
  1289. Assert.AreEqual (DataRowVersion.Original, param.SourceVersion, prefix + "SourceVersion (7)");
  1290. Assert.AreEqual (SqlDbType.VarChar, param.SqlDbType, prefix + "SqlDbType (7)");
  1291. Assert.IsNull (param.SqlValue, prefix + "SqlValue (7)");
  1292. //Assert.AreEqual (string.Empty, param.UdtTypeName, prefix + "UdtTypeName (7)");
  1293. Assert.IsNull (param.Value, prefix + "Value (7)");
  1294. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionDatabase, prefix + "XmlSchemaCollectionDatabase (7)");
  1295. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionName, prefix + "XmlSchemaCollectionName (7)");
  1296. Assert.AreEqual (string.Empty, param.XmlSchemaCollectionOwningSchema, prefix + "XmlSchemaCollectionOwningSchema (7)");
  1297. }
  1298. static int ClientVersion {
  1299. get {
  1300. return (SqlCommandBuilderTest.Engine.ClientVersion);
  1301. }
  1302. }
  1303. }
  1304. }