OleDbCommand_CommandText.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. //
  2. // Copyright (c) 2006 Mainsoft Co.
  3. //
  4. // Permission is hereby granted, free of charge, to any person obtaining
  5. // a copy of this software and associated documentation files (the
  6. // "Software"), to deal in the Software without restriction, including
  7. // without limitation the rights to use, copy, modify, merge, publish,
  8. // distribute, sublicense, and/or sell copies of the Software, and to
  9. // permit persons to whom the Software is furnished to do so, subject to
  10. // the following conditions:
  11. //
  12. // The above copyright notice and this permission notice shall be
  13. // included in all copies or substantial portions of the Software.
  14. //
  15. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  16. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  17. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  18. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  19. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  20. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  21. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22. //
  23. using System;
  24. using System.Data;
  25. using System.Data.OleDb;
  26. using MonoTests.System.Data.Utils;
  27. using MonoTests.System.Data.Utils.Data;
  28. using NUnit.Framework;
  29. namespace MonoTests.System.Data.OleDb
  30. {
  31. [TestFixture]
  32. public class OleDbCommand_CommandText : GHTBase
  33. {
  34. private Exception exp = null;
  35. private OleDbCommand cmd;
  36. const string TEST_CASE_ID = "48341_";
  37. public static void Main()
  38. {
  39. OleDbCommand_CommandText tc = new OleDbCommand_CommandText();
  40. Exception exp = null;
  41. try
  42. {
  43. tc.BeginTest("OleDBCommandText");
  44. tc.run();
  45. }
  46. catch(Exception ex){exp = ex;}
  47. finally {tc.EndTest(exp);}
  48. }
  49. public void run()
  50. {
  51. SetInConstractor();
  52. SetByProperty();
  53. UseSemiColonAsValue();
  54. UseColonAsValue();
  55. UseQuestionMarkAsValue();
  56. UseExclamationMarkAsValue();
  57. UseApostropheAsValue();
  58. UseCommaAsValue();
  59. UseDotAsValue();
  60. UseAtAsValue();
  61. UseQuoteAsValue();
  62. UseDollarAsValue();
  63. UsePercentAsValue();
  64. UseHatAsValue();
  65. UseAmpersnadAsValue();
  66. UseStartAsValue();
  67. UseParentesesAsValue();
  68. UsePlusAsValue();
  69. UseMinusAsValue();
  70. UseUnderscoreAsValue();
  71. UseSpaceAsValue();
  72. UseEqualAsValue();
  73. UseSlashAsValue();
  74. UseBackSlashAsValue();
  75. UseTildeAsValue();
  76. UseNOTAsValue();
  77. UseORAsValue();
  78. UseANDAsValue();
  79. UseSELECTAsValue();
  80. UseFROMAsValue();
  81. UseWHEREAsValue();
  82. UseINSERTAsValue();
  83. UseINTOAsValue();
  84. UseVALUESAsValue();
  85. UseDELETEAsValue();
  86. UseUPDATEAsValue();
  87. UseEXECAsValue();
  88. UseQueryAsValue();
  89. }
  90. [Test] public void SetByProperty()
  91. {
  92. exp = null;
  93. cmd = new OleDbCommand();
  94. cmd.CommandText = "SELECT * FROM Employees";
  95. try
  96. {
  97. BeginCase("CommandText2");
  98. Compare(cmd.CommandText, "SELECT * FROM Employees");
  99. }
  100. catch(Exception ex)
  101. {
  102. exp = ex;
  103. }
  104. finally
  105. {
  106. EndCase(exp);
  107. }
  108. }
  109. [Test] public void SetInConstractor()
  110. {
  111. exp = null;
  112. cmd = new OleDbCommand("SELECT * FROM Employees");
  113. try
  114. {
  115. BeginCase("CommandText1");
  116. Compare(cmd.CommandText, "SELECT * FROM Employees");
  117. }
  118. catch(Exception ex)
  119. {
  120. exp = ex;
  121. }
  122. finally
  123. {
  124. EndCase(exp);
  125. }
  126. }
  127. [Test] public void UseSemiColonAsValue()
  128. {
  129. RunValueInColumnTest("T_VARCHAR", ";");
  130. }
  131. [Test] public void UseColonAsValue()
  132. {
  133. RunValueInColumnTest("T_VARCHAR", ":");
  134. }
  135. [Test] public void UseQuestionMarkAsValue()
  136. {
  137. RunValueInColumnTest("T_VARCHAR", "?");
  138. }
  139. [Test] public void UseExclamationMarkAsValue()
  140. {
  141. RunValueInColumnTest("T_VARCHAR", "?");
  142. }
  143. [Test] public void UseApostropheAsValue()
  144. {
  145. RunValueInColumnTest("T_VARCHAR", "'");
  146. }
  147. [Test] public void UseCommaAsValue()
  148. {
  149. RunValueInColumnTest("T_VARCHAR", ",");
  150. }
  151. [Test] public void UseDotAsValue()
  152. {
  153. RunValueInColumnTest("T_VARCHAR", ".");
  154. }
  155. [Test] public void UseAtAsValue()
  156. {
  157. RunValueInColumnTest("T_VARCHAR", "@");
  158. }
  159. [Test] public void UseQuoteAsValue()
  160. {
  161. RunValueInColumnTest("T_VARCHAR", "\"");
  162. }
  163. [Test] public void UseDiezAsValue()
  164. {
  165. RunValueInColumnTest("T_VARCHAR", "#");
  166. }
  167. [Test] public void UseDollarAsValue()
  168. {
  169. RunValueInColumnTest("T_VARCHAR", "$");
  170. }
  171. [Test] public void UsePercentAsValue()
  172. {
  173. RunValueInColumnTest("T_VARCHAR", "%");
  174. }
  175. [Test] public void UseHatAsValue()
  176. {
  177. RunValueInColumnTest("T_VARCHAR", "^");
  178. }
  179. [Test] public void UseAmpersnadAsValue()
  180. {
  181. RunValueInColumnTest("T_VARCHAR", "&");
  182. }
  183. [Test] public void UseStartAsValue()
  184. {
  185. RunValueInColumnTest("T_VARCHAR", "*");
  186. }
  187. [Test] public void UseParentesesAsValue()
  188. {
  189. RunValueInColumnTest("T_VARCHAR", "(");
  190. RunValueInColumnTest("T_VARCHAR", "()");
  191. RunValueInColumnTest("T_VARCHAR", ")");
  192. RunValueInColumnTest("T_VARCHAR", "{");
  193. RunValueInColumnTest("T_VARCHAR", "{}");
  194. RunValueInColumnTest("T_VARCHAR", "}");
  195. RunValueInColumnTest("T_VARCHAR", "[");
  196. RunValueInColumnTest("T_VARCHAR", "[]");
  197. RunValueInColumnTest("T_VARCHAR", "]");
  198. RunValueInColumnTest("T_VARCHAR", "<");
  199. RunValueInColumnTest("T_VARCHAR", "<>");
  200. RunValueInColumnTest("T_VARCHAR", ">");
  201. }
  202. [Test] public void UsePlusAsValue()
  203. {
  204. RunValueInColumnTest("T_VARCHAR", "+");
  205. }
  206. [Test] public void UseMinusAsValue()
  207. {
  208. RunValueInColumnTest("T_VARCHAR", "-");
  209. }
  210. [Test] public void UseUnderscoreAsValue()
  211. {
  212. RunValueInColumnTest("T_VARCHAR", "_");
  213. }
  214. [Test] public void UseSpaceAsValue()
  215. {
  216. RunValueInColumnTest("T_VARCHAR", " ");
  217. }
  218. [Test] public void UseEqualAsValue()
  219. {
  220. RunValueInColumnTest("T_VARCHAR", "=");
  221. }
  222. [Test] public void UseSlashAsValue()
  223. {
  224. RunValueInColumnTest("T_VARCHAR", "\\");
  225. }
  226. [Test] public void UseBackSlashAsValue()
  227. {
  228. RunValueInColumnTest("T_VARCHAR", "/");
  229. }
  230. [Test] public void UseTildeAsValue()
  231. {
  232. RunValueInColumnTest("T_VARCHAR", "~");
  233. }
  234. [Test] public void UseNOTAsValue()
  235. {
  236. RunValueInColumnTest("T_VARCHAR", "NOT");
  237. }
  238. [Test] public void UseORAsValue()
  239. {
  240. RunValueInColumnTest("T_VARCHAR", "OR");
  241. }
  242. [Test] public void UseANDAsValue()
  243. {
  244. RunValueInColumnTest("T_VARCHAR", "AND");
  245. }
  246. [Test] public void UseSELECTAsValue()
  247. {
  248. RunValueInColumnTest("T_VARCHAR", "SELECT");
  249. }
  250. [Test] public void UseFROMAsValue()
  251. {
  252. RunValueInColumnTest("T_VARCHAR", "FROM");
  253. }
  254. [Test] public void UseWHEREAsValue()
  255. {
  256. RunValueInColumnTest("T_VARCHAR", "WHERE");
  257. }
  258. [Test] public void UseINSERTAsValue()
  259. {
  260. RunValueInColumnTest("T_VARCHAR", "INSERT");
  261. }
  262. [Test] public void UseINTOAsValue()
  263. {
  264. RunValueInColumnTest("T_VARCHAR", "INTO");
  265. }
  266. [Test] public void UseVALUESAsValue()
  267. {
  268. RunValueInColumnTest("T_VARCHAR", "VALUES");
  269. }
  270. [Test] public void UseDELETEAsValue()
  271. {
  272. RunValueInColumnTest("T_VARCHAR", "DELETE");
  273. }
  274. [Test] public void UseUPDATEAsValue()
  275. {
  276. RunValueInColumnTest("T_VARCHAR", "UPDATE");
  277. }
  278. [Test] public void UseEXECAsValue()
  279. {
  280. RunValueInColumnTest("T_VARCHAR", "EXEC");
  281. }
  282. [Test] public void UseQueryAsValue()
  283. {
  284. string columnName;
  285. switch (ConnectedDataProvider.GetDbType())
  286. {
  287. case DataBaseServer.SQLServer:
  288. columnName = "T_VARCHAR";
  289. break;
  290. case DataBaseServer.Oracle:
  291. columnName = "T_LONG";
  292. break;
  293. case DataBaseServer.DB2:
  294. columnName = "T_LONGVARCHAR";
  295. break;
  296. default:
  297. columnName = "T_VARCHAR";
  298. break;
  299. }
  300. RunValueInColumnTest(columnName, "SELECT * FROM TYPES_SIMPLE");
  301. }
  302. private void RunValueInColumnTest(string columnToTest, string valueToTest)
  303. {
  304. UnQuotedValueInColumn(columnToTest, valueToTest);
  305. QuotedValueInColumn(columnToTest, valueToTest);
  306. }
  307. private void QuotedValueInColumn(string columnToTest, string valueToTest)
  308. {
  309. ValueInColumn(columnToTest, string.Format("'{0}'", valueToTest));
  310. }
  311. private void UnQuotedValueInColumn(string columnToTest, string valueToTest)
  312. {
  313. ValueInColumn(columnToTest, valueToTest);
  314. }
  315. private void ValueInColumn(string columnToTest, string valueToTest)
  316. {
  317. exp = null;
  318. OleDbDataReader rdr = null;
  319. OleDbConnection con = null;
  320. DbTypeParametersCollection row = ConnectedDataProvider.GetSimpleDbTypesParameters();
  321. BeginCase(string.Format("Use {0} as value", valueToTest));
  322. string rowId = TEST_CASE_ID + TestCaseNumber.ToString();
  323. try
  324. {
  325. foreach(DbTypeParameter param in row)
  326. {
  327. param.Value = DBNull.Value;
  328. }
  329. row[columnToTest].Value = valueToTest;
  330. Log("rowId:" + rowId + " columnToTest:" + columnToTest + " valueToTest:" + valueToTest);
  331. row.ExecuteInsert(rowId);
  332. row.ExecuteSelectReader(rowId, out rdr, out con);
  333. rdr.Read();
  334. int columnOrdinal = rdr.GetOrdinal(columnToTest);
  335. //this.Log(valueToTest);
  336. Compare(valueToTest, rdr.GetValue(columnOrdinal));
  337. }
  338. catch(Exception ex)
  339. {
  340. exp = ex;
  341. }
  342. finally
  343. {
  344. EndCase(exp);
  345. row.ExecuteDelete(rowId);
  346. if (con != null && con.State != ConnectionState.Closed)
  347. {
  348. con.Close();
  349. }
  350. if (rdr != null && !rdr.IsClosed)
  351. {
  352. rdr.Close();
  353. }
  354. }
  355. }
  356. }
  357. }