TestOracleClient.cs 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840
  1. //
  2. // TestOracleClient.cs - Tests Sytem.Data.OracleClient
  3. // data provider in Mono.
  4. //
  5. // Part of managed C#/.NET library System.Data.OracleClient.dll
  6. //
  7. // Part of the Mono class libraries at
  8. // mcs/class/System.Data.OracleClient/System.Data.OracleClient.OCI
  9. //
  10. // Tests:
  11. // Assembly: System.Data.OracleClient.dll
  12. // Namespace: System.Data.OracleClient
  13. //
  14. // To Compile:
  15. // mcs TestOracleClient.cs /r:System.Data.dll /r:System.Data.OracleClient.dll /nowarn:0168
  16. //
  17. // Author:
  18. // Daniel Morgan <[email protected]>
  19. //
  20. // Copyright (C) Daniel Morgan, 2002, 2004-2005
  21. //
  22. using System;
  23. using System.IO;
  24. using System.Runtime.InteropServices;
  25. using System.Data;
  26. using System.Data.OracleClient;
  27. using System.Text;
  28. using System.Threading;
  29. namespace Test.OracleClient
  30. {
  31. public class OracleTest
  32. {
  33. private static Thread t = null;
  34. private static string conStr;
  35. public static readonly int MAX_CONNECTIONS = 30; // max connections default to 100, but I will set to 30.
  36. public OracleTest()
  37. {
  38. }
  39. static void MonoTest(OracleConnection con)
  40. {
  41. Console.WriteLine (" Drop table MONO_ORACLE_TEST ...");
  42. try {
  43. OracleCommand cmd2 = con.CreateCommand ();
  44. cmd2.CommandText = "DROP TABLE MONO_ORACLE_TEST";
  45. cmd2.ExecuteNonQuery ();
  46. }
  47. catch (OracleException oe1) {
  48. // ignore if table already exists
  49. }
  50. OracleCommand cmd = null;
  51. Console.WriteLine(" Creating table MONO_ORACLE_TEST...");
  52. cmd = new OracleCommand();
  53. cmd.Connection = con;
  54. cmd.CommandText = "CREATE TABLE MONO_ORACLE_TEST ( " +
  55. " varchar2_value VarChar2(32), " +
  56. " long_value long, " +
  57. " number_whole_value Number(18), " +
  58. " number_scaled_value Number(18,2), " +
  59. " number_integer_value Integer, " +
  60. " float_value Float, " +
  61. " date_value Date, " +
  62. " char_value Char(32), " +
  63. " clob_value Clob, " +
  64. " blob_value Blob, " +
  65. " clob_empty_value Clob, " +
  66. " blob_empty_value Blob, " +
  67. " varchar2_null_value VarChar2(32), " +
  68. " number_whole_null_value Number(18), " +
  69. " number_scaled_null_value Number(18,2), " +
  70. " number_integer_null_value Integer, " +
  71. " float_null_value Float, " +
  72. " date_null_value Date, " +
  73. " char_null_value Char(32), " +
  74. " clob_null_value Clob, " +
  75. " blob_null_value Blob " +
  76. ")";
  77. cmd.ExecuteNonQuery();
  78. Console.WriteLine(" Begin Trans for table MONO_ORACLE_TEST...");
  79. OracleTransaction trans = con.BeginTransaction ();
  80. Console.WriteLine(" Inserting value into MONO_ORACLE_TEST...");
  81. cmd = new OracleCommand();
  82. cmd.Connection = con;
  83. cmd.Transaction = trans;
  84. cmd.CommandText = "INSERT INTO mono_oracle_test " +
  85. " ( varchar2_value, " +
  86. " long_value, " +
  87. " number_whole_value, " +
  88. " number_scaled_value, " +
  89. " number_integer_value, " +
  90. " float_value, " +
  91. " date_value, " +
  92. " char_value, " +
  93. " clob_value, " +
  94. " blob_value, " +
  95. " clob_empty_value, " +
  96. " blob_empty_value " +
  97. ") " +
  98. " VALUES( " +
  99. " 'Mono', " +
  100. " 'This is a LONG column', " +
  101. " 123, " +
  102. " 456.78, " +
  103. " 8765, " +
  104. " 235.2, " +
  105. " TO_DATE( '2004-12-31', 'YYYY-MM-DD' ), " +
  106. " 'US', " +
  107. " EMPTY_CLOB(), " +
  108. " EMPTY_BLOB()," +
  109. " EMPTY_CLOB(), " +
  110. " EMPTY_BLOB()" +
  111. ")";
  112. cmd.ExecuteNonQuery();
  113. Console.WriteLine(" Select/Update CLOB columns on table MONO_ORACLE_TEST...");
  114. // update BLOB and CLOB columns
  115. OracleCommand select = con.CreateCommand ();
  116. select.Transaction = trans;
  117. select.CommandText = "SELECT CLOB_VALUE, BLOB_VALUE FROM MONO_ORACLE_TEST FOR UPDATE";
  118. OracleDataReader reader = select.ExecuteReader ();
  119. if (!reader.Read ())
  120. Console.WriteLine ("ERROR: RECORD NOT FOUND");
  121. // update clob_value
  122. Console.WriteLine(" Update CLOB column on table MONO_ORACLE_TEST...");
  123. OracleLob clob = reader.GetOracleLob (0);
  124. byte[] bytes = null;
  125. UnicodeEncoding encoding = new UnicodeEncoding ();
  126. bytes = encoding.GetBytes ("Mono is fun!");
  127. clob.Write (bytes, 0, bytes.Length);
  128. clob.Close ();
  129. // update blob_value
  130. Console.WriteLine(" Update BLOB column on table MONO_ORACLE_TEST...");
  131. OracleLob blob = reader.GetOracleLob (1);
  132. bytes = new byte[6] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x036 };
  133. blob.Write (bytes, 0, bytes.Length);
  134. blob.Close ();
  135. Console.WriteLine(" Commit trans for table MONO_ORACLE_TEST...");
  136. trans.Commit ();
  137. // OracleCommand.ExecuteReader of MONO_ORACLE_TEST table
  138. Console.WriteLine(" Read simple test for table MONO_ORACLE_TEST...");
  139. ReadSimpleTest(con, "SELECT * FROM MONO_ORACLE_TEST");
  140. // OracleCommand.ExecuteScalar
  141. Console.WriteLine(" -ExecuteScalar tests...");
  142. string varchar2_value = (string) ReadScalar (con,"SELECT MAX(varchar2_value) FROM MONO_ORACLE_TEST");
  143. Console.WriteLine(" String Value: " + varchar2_value);
  144. Console.WriteLine(" Read Scalar: number_whole_value");
  145. decimal number_whole_value = (decimal)
  146. ReadScalar (con,"SELECT MAX(number_whole_value) FROM MONO_ORACLE_TEST");
  147. Console.WriteLine(" Int32 Value: " + number_whole_value.ToString());
  148. Console.WriteLine(" Read Scalar: number_scaled_value");
  149. decimal number_scaled_value = (decimal)
  150. ReadScalar (con,"SELECT number_scaled_value FROM MONO_ORACLE_TEST");
  151. Console.WriteLine(" Decimal Value: " + number_scaled_value.ToString());
  152. Console.WriteLine(" Read Scalar: date_value");
  153. DateTime date_value = (DateTime)
  154. ReadScalar (con,"SELECT date_value FROM MONO_ORACLE_TEST");
  155. Console.WriteLine(" DateTime Value: " + date_value.ToString());
  156. Console.WriteLine(" Read Scalar: clob_value");
  157. string clob_value = (string)
  158. ReadScalar (con,"SELECT clob_value FROM MONO_ORACLE_TEST");
  159. Console.WriteLine(" CLOB Value: " + clob_value);
  160. Console.WriteLine(" Read Scalar: blob_value");
  161. byte[] blob_value = (byte[])
  162. ReadScalar (con,"SELECT blob_value FROM MONO_ORACLE_TEST");
  163. string sblob_value = GetHexString (blob_value);
  164. Console.WriteLine(" BLOB Value: " + sblob_value);
  165. // OracleCommand.ExecuteOracleScalar
  166. Console.WriteLine(" -ExecuteOracleScalar tests...");
  167. Console.WriteLine(" Read Oracle Scalar: varchar2_value");
  168. ReadOracleScalar (con,"SELECT MAX(varchar2_value) FROM MONO_ORACLE_TEST");
  169. Console.WriteLine(" Read Oracle Scalar: number_whole_value");
  170. ReadOracleScalar (con,"SELECT MAX(number_whole_value) FROM MONO_ORACLE_TEST");
  171. Console.WriteLine(" Read Oracle Scalar: number_scaled_value");
  172. ReadOracleScalar (con,"SELECT number_scaled_value FROM MONO_ORACLE_TEST");
  173. Console.WriteLine(" Read Oracle Scalar: date_value");
  174. ReadOracleScalar (con,"SELECT date_value FROM MONO_ORACLE_TEST");
  175. Console.WriteLine(" Read Oracle Scalar: clob_value");
  176. ReadOracleScalar (con,"SELECT clob_value FROM MONO_ORACLE_TEST");
  177. Console.WriteLine(" Read Oracle Scalar: blob_value");
  178. ReadOracleScalar (con,"SELECT blob_value FROM MONO_ORACLE_TEST");
  179. }
  180. static object ReadScalar (OracleConnection con, string selectSql)
  181. {
  182. OracleCommand cmd = null;
  183. cmd = con.CreateCommand();
  184. cmd.CommandText = selectSql;
  185. object o = cmd.ExecuteScalar ();
  186. string dataType = o.GetType ().ToString ();
  187. Console.WriteLine (" DataType: " + dataType);
  188. return o;
  189. }
  190. static void ReadOracleScalar (OracleConnection con, string selectSql)
  191. {
  192. OracleCommand cmd = null;
  193. cmd = con.CreateCommand();
  194. cmd.CommandText = selectSql;
  195. object o = cmd.ExecuteOracleScalar ();
  196. string dataType = o.GetType ().ToString ();
  197. Console.WriteLine (" DataType: " + dataType);
  198. if (dataType.Equals("System.Data.OracleClient.OracleLob"))
  199. o = ((OracleLob) o).Value;
  200. if (o.GetType ().ToString ().Equals ("System.Byte[]"))
  201. o = GetHexString ((byte[])o);
  202. Console.WriteLine (" Value: " + o.ToString ());
  203. }
  204. static void ReadSimpleTest(OracleConnection con, string selectSql)
  205. {
  206. OracleCommand cmd = null;
  207. OracleDataReader reader = null;
  208. cmd = con.CreateCommand();
  209. cmd.CommandText = selectSql;
  210. reader = cmd.ExecuteReader();
  211. Console.WriteLine(" Results...");
  212. Console.WriteLine(" Schema");
  213. DataTable table;
  214. table = reader.GetSchemaTable();
  215. for(int c = 0; c < reader.FieldCount; c++) {
  216. Console.WriteLine(" Column " + c.ToString());
  217. DataRow row = table.Rows[c];
  218. string strColumnName = row["ColumnName"].ToString();
  219. string strBaseColumnName = row["BaseColumnName"].ToString();
  220. string strColumnSize = row["ColumnSize"].ToString();
  221. string strNumericScale = row["NumericScale"].ToString();
  222. string strNumericPrecision = row["NumericPrecision"].ToString();
  223. string strDataType = row["DataType"].ToString();
  224. Console.WriteLine(" ColumnName: " + strColumnName);
  225. Console.WriteLine(" BaseColumnName: " + strBaseColumnName);
  226. Console.WriteLine(" ColumnSize: " + strColumnSize);
  227. Console.WriteLine(" NumericScale: " + strNumericScale);
  228. Console.WriteLine(" NumericPrecision: " + strNumericPrecision);
  229. Console.WriteLine(" DataType: " + strDataType);
  230. }
  231. int r = 0;
  232. Console.WriteLine (" Data");
  233. while (reader.Read ()) {
  234. r++;
  235. Console.WriteLine (" Row: " + r.ToString ());
  236. for (int f = 0; f < reader.FieldCount; f++) {
  237. string sname = "";
  238. object ovalue = "";
  239. string svalue = "";
  240. string sDataType = "";
  241. string sFieldType = "";
  242. string sDataTypeName = "";
  243. string sOraDataType = "";
  244. sname = reader.GetName (f);
  245. if (reader.IsDBNull (f)) {
  246. ovalue = DBNull.Value;
  247. svalue = "";
  248. sDataType = "DBNull.Value";
  249. sOraDataType = "DBNull.Value";
  250. }
  251. else {
  252. //ovalue = reader.GetValue (f);
  253. ovalue = reader.GetOracleValue (f);
  254. object oravalue = null;
  255. sDataType = ovalue.GetType ().ToString ();
  256. switch (sDataType) {
  257. case "System.Data.OracleClient.OracleString":
  258. oravalue = ((OracleString) ovalue).Value;
  259. break;
  260. case "System.Data.OracleClient.OracleNumber":
  261. oravalue = ((OracleNumber) ovalue).Value;
  262. break;
  263. case "System.Data.OracleClient.OracleLob":
  264. OracleLob lob = (OracleLob) ovalue;
  265. oravalue = lob.Value;
  266. lob.Close ();
  267. break;
  268. case "System.Data.OracleClient.OracleDateTime":
  269. oravalue = ((OracleDateTime) ovalue).Value;
  270. break;
  271. case "System.Byte[]":
  272. oravalue = GetHexString((byte[])ovalue);
  273. break;
  274. case "System.Decimal":
  275. //Console.WriteLine(" *** Get Decimal, Int16, Int32, Int64, Float, Double, ...");
  276. decimal dec = reader.GetDecimal (f);
  277. //Console.WriteLine(" GetDecimal: " + dec.ToString ());
  278. oravalue = (object) dec;
  279. /*
  280. try {
  281. reader.GetInt16 (f);
  282. } catch (NotSupportedException e) {
  283. Console.WriteLine (" ** Expected exception caught for GetInt16: NotSupportedException: " + e.Message);
  284. }
  285. try {
  286. long lng = reader.GetInt64 (f);
  287. Console.WriteLine(" GetInt64: " + lng.ToString ());
  288. int n = reader.GetInt32 (f);
  289. Console.WriteLine(" GetInt32: " + n.ToString ());
  290. float flt = reader.GetFloat (f);
  291. Console.WriteLine(" GetFloat: " + flt.ToString ());
  292. double dbl = reader.GetDouble (f);
  293. Console.WriteLine(" GetDouble: " + dbl.ToString ());
  294. } catch (OverflowException oe1) {
  295. Console.WriteLine (" ** Overflow exception for numbers to big or too small: " + oe1.Message);
  296. }
  297. */
  298. break;
  299. default:
  300. oravalue = ovalue.ToString ();
  301. break;
  302. }
  303. sOraDataType = oravalue.GetType ().ToString ();
  304. if (sOraDataType.Equals ("System.Byte[]"))
  305. svalue = GetHexString ((byte[]) oravalue);
  306. else
  307. svalue = oravalue.ToString();
  308. }
  309. sFieldType = reader.GetFieldType(f).ToString();
  310. sDataTypeName = reader.GetDataTypeName(f);
  311. Console.WriteLine(" Field: " + f.ToString());
  312. Console.WriteLine(" Name: " + sname);
  313. Console.WriteLine(" Value: " + svalue);
  314. Console.WriteLine(" Oracle Data Type: " + sOraDataType);
  315. Console.WriteLine(" Data Type: " + sDataType);
  316. Console.WriteLine(" Field Type: " + sFieldType);
  317. Console.WriteLine(" Data Type Name: " + sDataTypeName);
  318. }
  319. }
  320. if(r == 0)
  321. Console.WriteLine(" No data returned.");
  322. }
  323. static void DataAdapterTest (OracleConnection connection)
  324. {
  325. Console.WriteLine(" Create select command...");
  326. OracleCommand command = connection.CreateCommand ();
  327. command.CommandText = "SELECT * FROM EMP";
  328. Console.WriteLine(" Create data adapter...");
  329. OracleDataAdapter adapter = new OracleDataAdapter (command);
  330. Console.WriteLine(" Create DataSet...");
  331. DataSet dataSet = new DataSet ("EMP");
  332. Console.WriteLine(" Fill DataSet via data adapter...");
  333. adapter.Fill (dataSet);
  334. Console.WriteLine(" Get DataTable...");
  335. DataTable table = dataSet.Tables [0];
  336. Console.WriteLine(" Display each row...");
  337. int rowCount = 0;
  338. foreach (DataRow row in table.Rows) {
  339. Console.WriteLine (" row {0}", rowCount + 1);
  340. for (int i = 0; i < table.Columns.Count; i += 1) {
  341. Console.WriteLine (" {0}: {1}", table.Columns [i].ColumnName, row [i]);
  342. }
  343. Console.WriteLine ();
  344. rowCount += 1;
  345. }
  346. }
  347. public static void DataAdapterTest2 (OracleConnection con)
  348. {
  349. DataAdapterTest2_Setup (con);
  350. ReadSimpleTest (con, "SELECT * FROM mono_adapter_test");
  351. GetMetaData (con, "SELECT * FROM mono_adapter_test");
  352. DataAdapterTest2_Insert (con);
  353. ReadSimpleTest (con, "SELECT * FROM mono_adapter_test");
  354. DataAdapterTest2_Update (con);
  355. ReadSimpleTest (con, "SELECT * FROM mono_adapter_test");
  356. DataAdapterTest2_Delete (con);
  357. ReadSimpleTest (con, "SELECT * FROM mono_adapter_test");
  358. }
  359. public static void GetMetaData (OracleConnection con, string sql)
  360. {
  361. OracleCommand cmd = null;
  362. OracleDataReader rdr = null;
  363. cmd = con.CreateCommand();
  364. cmd.CommandText = sql;
  365. Console.WriteLine("Read Schema With KeyInfo");
  366. rdr = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly);
  367. DataTable dt;
  368. dt = rdr.GetSchemaTable();
  369. foreach (DataRow schemaRow in dt.Rows) {
  370. foreach (DataColumn schemaCol in dt.Columns) {
  371. Console.WriteLine(schemaCol.ColumnName +
  372. " = " +
  373. schemaRow[schemaCol]);
  374. Console.WriteLine("---Type: " + schemaRow[schemaCol].GetType ().ToString());
  375. }
  376. Console.WriteLine("");
  377. }
  378. Console.WriteLine("Read Schema with No KeyInfo");
  379. rdr = cmd.ExecuteReader();
  380. dt = rdr.GetSchemaTable();
  381. foreach (DataRow schemaRow in dt.Rows) {
  382. foreach (DataColumn schemaCol in dt.Columns) {
  383. Console.WriteLine(schemaCol.ColumnName +
  384. " = " +
  385. schemaRow[schemaCol]);
  386. Console.WriteLine("---Type: " + schemaRow[schemaCol].GetType ().ToString());
  387. Console.WriteLine();
  388. }
  389. }
  390. }
  391. public static void DataAdapterTest2_Setup (OracleConnection con)
  392. {
  393. Console.WriteLine (" Drop table mono_adapter_test ...");
  394. try {
  395. OracleCommand cmd2 = con.CreateCommand ();
  396. cmd2.CommandText = "DROP TABLE mono_adapter_test";
  397. cmd2.ExecuteNonQuery ();
  398. }
  399. catch (OracleException oe1) {
  400. // ignore if table already exists
  401. }
  402. OracleCommand cmd = null;
  403. int rowsAffected = 0;
  404. Console.WriteLine(" Creating table mono_adapter_test...");
  405. cmd = new OracleCommand ();
  406. cmd.Connection = con;
  407. cmd.CommandText = "CREATE TABLE mono_adapter_test ( " +
  408. " varchar2_value VarChar2(32), " +
  409. " number_whole_value Number(18) PRIMARY KEY, " +
  410. " number_scaled_value Number(18,2), " +
  411. " number_integer_value Integer, " +
  412. " float_value Float, " +
  413. " date_value Date, " +
  414. " clob_value Clob, " +
  415. " blob_value Blob ) ";
  416. // FIXME: char_value does not work
  417. /*
  418. cmd.CommandText = "CREATE TABLE mono_adapter_test ( " +
  419. " varchar2_value VarChar2(32), " +
  420. " number_whole_value Number(18) PRIMARY KEY, " +
  421. " number_scaled_value Number(18,2), " +
  422. " number_integer_value Integer, " +
  423. " float_value Float, " +
  424. " date_value Date, " +
  425. " char_value Char(32), " +
  426. " clob_value Clob, " +
  427. " blob_value Blob ) ";
  428. */
  429. rowsAffected = cmd.ExecuteNonQuery();
  430. Console.WriteLine(" Begin Trans for table mono_adapter_test...");
  431. OracleTransaction trans = con.BeginTransaction ();
  432. Console.WriteLine(" Inserting value into mono_adapter_test...");
  433. cmd = new OracleCommand();
  434. cmd.Connection = con;
  435. cmd.Transaction = trans;
  436. cmd.CommandText = "INSERT INTO mono_adapter_test " +
  437. " ( varchar2_value, " +
  438. " number_whole_value, " +
  439. " number_scaled_value, " +
  440. " number_integer_value, " +
  441. " float_value, " +
  442. " date_value, " +
  443. " clob_value, " +
  444. " blob_value " +
  445. ") " +
  446. " VALUES( " +
  447. " 'Mono', " +
  448. " 11, " +
  449. " 456.78, " +
  450. " 8765, " +
  451. " 235.2, " +
  452. " TO_DATE( '2004-12-31', 'YYYY-MM-DD' ), " +
  453. " EMPTY_CLOB(), " +
  454. " EMPTY_BLOB() " +
  455. ")";
  456. /*
  457. cmd.CommandText = "INSERT INTO mono_adapter_test " +
  458. " ( varchar2_value, " +
  459. " number_whole_value, " +
  460. " number_scaled_value, " +
  461. " number_integer_value, " +
  462. " float_value, " +
  463. " date_value, " +
  464. " char_value, " +
  465. " clob_value, " +
  466. " blob_value " +
  467. ") " +
  468. " VALUES( " +
  469. " 'Mono', " +
  470. " 11, " +
  471. " 456.78, " +
  472. " 8765, " +
  473. " 235.2, " +
  474. " TO_DATE( '2004-12-31', 'YYYY-MM-DD' ), " +
  475. " 'US', " +
  476. " EMPTY_CLOB(), " +
  477. " EMPTY_BLOB() " +
  478. ")";
  479. */
  480. rowsAffected = cmd.ExecuteNonQuery();
  481. Console.WriteLine(" Select/Update CLOB columns on table mono_adapter_test...");
  482. // update BLOB and CLOB columns
  483. OracleCommand select = con.CreateCommand ();
  484. select.Transaction = trans;
  485. select.CommandText = "SELECT CLOB_VALUE, BLOB_VALUE FROM mono_adapter_test FOR UPDATE";
  486. OracleDataReader reader = select.ExecuteReader ();
  487. if (!reader.Read ())
  488. Console.WriteLine ("ERROR: RECORD NOT FOUND");
  489. // update clob_value
  490. Console.WriteLine(" Update CLOB column on table mono_adapter_test...");
  491. OracleLob clob = reader.GetOracleLob (0);
  492. byte[] bytes = null;
  493. UnicodeEncoding encoding = new UnicodeEncoding ();
  494. bytes = encoding.GetBytes ("Mono is fun!");
  495. clob.Write (bytes, 0, bytes.Length);
  496. clob.Close ();
  497. // update blob_value
  498. Console.WriteLine(" Update BLOB column on table mono_adapter_test...");
  499. OracleLob blob = reader.GetOracleLob (1);
  500. bytes = new byte[6] { 0x31, 0x32, 0x33, 0x34, 0x35, 0x036 };
  501. blob.Write (bytes, 0, bytes.Length);
  502. blob.Close ();
  503. Console.WriteLine(" Commit trans for table mono_adapter_test...");
  504. trans.Commit ();
  505. CommitCursor (con);
  506. }
  507. public static void DataAdapterTest2_Insert (OracleConnection con)
  508. {
  509. Console.WriteLine("================================");
  510. Console.WriteLine("=== Adapter Insert =============");
  511. Console.WriteLine("================================");
  512. OracleTransaction transaction = con.BeginTransaction ();
  513. Console.WriteLine(" Create adapter...");
  514. OracleDataAdapter da = new OracleDataAdapter("select * from mono_adapter_test", con);
  515. da.SelectCommand.Transaction = transaction;
  516. Console.WriteLine(" Create command builder...");
  517. OracleCommandBuilder mycb = new OracleCommandBuilder(da);
  518. Console.WriteLine(" Create data set ...");
  519. DataSet ds = new DataSet();
  520. Console.WriteLine(" Fill data set via adapter...");
  521. da.Fill(ds, "mono_adapter_test");
  522. Console.WriteLine(" New Row...");
  523. DataRow myRow;
  524. myRow = ds.Tables["mono_adapter_test"].NewRow();
  525. byte[] bytes = new byte[] { 0x45,0x46,0x47,0x48,0x49,0x50 };
  526. Console.WriteLine(" Set values in the new DataRow...");
  527. myRow["varchar2_value"] = "OracleClient";
  528. myRow["number_whole_value"] = 22;
  529. myRow["number_scaled_value"] = 12.34;
  530. myRow["number_integer_value"] = 456;
  531. myRow["float_value"] = 98.76;
  532. myRow["date_value"] = new DateTime(2001,07,09);
  533. Console.WriteLine(" *** FIXME; char value not working");
  534. //myRow["char_value"] = "Romeo";
  535. myRow["clob_value"] = "clobtest";
  536. myRow["blob_value"] = bytes;
  537. Console.WriteLine(" Add DataRow to DataTable...");
  538. ds.Tables["mono_adapter_test"].Rows.Add(myRow);
  539. Console.WriteLine("da.Update(ds...");
  540. da.Update(ds, "mono_adapter_test");
  541. transaction.Commit();
  542. }
  543. public static void DataAdapterTest2_Update (OracleConnection con)
  544. {
  545. Console.WriteLine("================================");
  546. Console.WriteLine("=== Adapter Update =============");
  547. Console.WriteLine("================================");
  548. OracleTransaction transaction = con.BeginTransaction ();
  549. Console.WriteLine(" Create adapter...");
  550. OracleCommand selectCmd = con.CreateCommand ();
  551. selectCmd.Transaction = transaction;
  552. selectCmd.CommandText = "SELECT * FROM mono_adapter_test";
  553. OracleDataAdapter da = new OracleDataAdapter(selectCmd);
  554. Console.WriteLine(" Create command builder...");
  555. OracleCommandBuilder mycb = new OracleCommandBuilder(da);
  556. Console.WriteLine(" Create data set ...");
  557. DataSet ds = new DataSet();
  558. Console.WriteLine(" Set missing schema action...");
  559. Console.WriteLine(" Fill data set via adapter...");
  560. da.Fill(ds, "mono_adapter_test");
  561. DataRow myRow;
  562. Console.WriteLine(" New Row...");
  563. myRow = ds.Tables["mono_adapter_test"].Rows[0];
  564. Console.WriteLine("Tables Count: " + ds.Tables.Count.ToString());
  565. DataTable table = ds.Tables["mono_adapter_test"];
  566. DataRowCollection rows;
  567. rows = table.Rows;
  568. Console.WriteLine(" Row Count: " + rows.Count.ToString());
  569. myRow = rows[0];
  570. byte[] bytes = new byte[] { 0x62,0x63,0x64,0x65,0x66,0x67 };
  571. Console.WriteLine(" Set values in the new DataRow...");
  572. myRow["varchar2_value"] = "Super Power!";
  573. myRow["number_scaled_value"] = 12.35;
  574. myRow["number_integer_value"] = 457;
  575. myRow["float_value"] = 198.76;
  576. myRow["date_value"] = new DateTime(2002,08,09);
  577. //myRow["char_value"] = "Juliet";
  578. myRow["clob_value"] = "this is a clob";
  579. myRow["blob_value"] = bytes;
  580. Console.WriteLine("da.Update(ds...");
  581. da.Update(ds, "mono_adapter_test");
  582. transaction.Commit();
  583. }
  584. public static void DataAdapterTest2_Delete (OracleConnection con)
  585. {
  586. Console.WriteLine("================================");
  587. Console.WriteLine("=== Adapter Delete =============");
  588. Console.WriteLine("================================");
  589. OracleTransaction transaction = con.BeginTransaction ();
  590. Console.WriteLine(" Create adapter...");
  591. OracleDataAdapter da = new OracleDataAdapter("SELECT * FROM mono_adapter_test", con);
  592. Console.WriteLine(" Create command builder...");
  593. OracleCommandBuilder mycb = new OracleCommandBuilder(da);
  594. Console.WriteLine(" set transr...");
  595. da.SelectCommand.Transaction = transaction;
  596. Console.WriteLine(" Create data set ...");
  597. DataSet ds = new DataSet();
  598. Console.WriteLine("Fill data set via adapter...");
  599. da.Fill(ds, "mono_adapter_test");
  600. Console.WriteLine("delete row...");
  601. ds.Tables["mono_adapter_test"].Rows[0].Delete();
  602. Console.WriteLine("da.Update(table...");
  603. da.Update(ds, "mono_adapter_test");
  604. Console.WriteLine("Commit...");
  605. transaction.Commit();
  606. }
  607. static void TestNonQueryUsingExecuteReader(OracleConnection con)
  608. {
  609. OracleDataReader reader = null;
  610. OracleTransaction trans = null;
  611. Console.WriteLine(" drop table mono_adapter_test...");
  612. OracleCommand cmd = con.CreateCommand();
  613. cmd.CommandText = "DROP TABLE MONO_ADAPTER_TEST";
  614. trans = con.BeginTransaction();
  615. cmd.Transaction = trans;
  616. try {
  617. reader = cmd.ExecuteReader();
  618. Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
  619. reader.Read();
  620. Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
  621. reader.Close();
  622. trans.Commit();
  623. }
  624. catch(OracleException e) {
  625. Console.WriteLine(" OracleException caught: " + e.Message);
  626. trans.Commit();
  627. }
  628. Console.WriteLine(" Create table mono_adapter_test...");
  629. cmd.CommandText = "CREATE TABLE MONO_ADAPTER_TEST ( " +
  630. " varchar2_value VarChar2(32), " +
  631. " number_whole_value Number(18,0) PRIMARY KEY ) ";
  632. trans = con.BeginTransaction();
  633. cmd.Transaction = trans;
  634. reader = cmd.ExecuteReader();
  635. Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
  636. reader.Read();
  637. Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
  638. reader.Close();
  639. trans.Commit();
  640. Console.WriteLine("Insert into table mono_adapter_test...");
  641. string sql =
  642. "INSERT INTO MONO_ADAPTER_TEST " +
  643. "(VARCHAR2_VALUE,NUMBER_WHOLE_VALUE) " +
  644. "VALUES(:p1,:p2)";
  645. OracleCommand cmd2 = con.CreateCommand();
  646. trans = con.BeginTransaction();
  647. cmd2.Transaction = trans;
  648. cmd2.CommandText = sql;
  649. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.VarChar, 32);
  650. myParameter1.Direction = ParameterDirection.Input;
  651. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.Number);
  652. myParameter2.Direction = ParameterDirection.Input;
  653. myParameter2.Value = 182;
  654. myParameter1.Value = "Mono";
  655. cmd2.Parameters.Add (myParameter1);
  656. cmd2.Parameters.Add (myParameter2);
  657. // insert 1 record
  658. reader = cmd2.ExecuteReader();
  659. Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
  660. reader.Read();
  661. Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
  662. reader.Close();
  663. // insert another record
  664. Console.WriteLine(" Insert another record...");
  665. myParameter2.Value = 183;
  666. myParameter1.Value = "Oracle";
  667. reader = cmd2.ExecuteReader();
  668. Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
  669. reader.Read();
  670. Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
  671. reader.Close();
  672. trans.Commit();
  673. trans = null;
  674. ReadSimpleTest(con, "SELECT * FROM MONO_ADAPTER_TEST");
  675. }
  676. static void CommitCursor (OracleConnection con)
  677. {
  678. OracleCommand cmd = con.CreateCommand ();
  679. cmd.CommandText = "COMMIT";
  680. cmd.ExecuteNonQuery ();
  681. cmd.Dispose ();
  682. cmd = null;
  683. }
  684. static void RollbackTest (OracleConnection connection)
  685. {
  686. OracleTransaction transaction = connection.BeginTransaction ();
  687. OracleCommand insert = connection.CreateCommand ();
  688. insert.Transaction = transaction;
  689. insert.CommandText = "INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
  690. Console.WriteLine (" Inserting record ...");
  691. insert.ExecuteNonQuery ();
  692. OracleCommand select = connection.CreateCommand ();
  693. select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
  694. select.Transaction = transaction;
  695. OracleDataReader reader = select.ExecuteReader ();
  696. reader.Read ();
  697. Console.WriteLine (" Row count SHOULD BE 1, VALUE IS {0}", reader.GetValue (0));
  698. reader.Close ();
  699. Console.WriteLine (" Rolling back transaction ...");
  700. transaction.Rollback ();
  701. select = connection.CreateCommand ();
  702. select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
  703. reader = select.ExecuteReader ();
  704. reader.Read ();
  705. Console.WriteLine (" Row count SHOULD BE 0, VALUE IS {0}", reader.GetValue (0));
  706. reader.Close ();
  707. }
  708. static void CommitTest (OracleConnection connection)
  709. {
  710. OracleTransaction transaction = connection.BeginTransaction ();
  711. OracleCommand insert = connection.CreateCommand ();
  712. insert.Transaction = transaction;
  713. insert.CommandText = "INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
  714. Console.WriteLine (" Inserting record ...");
  715. insert.ExecuteNonQuery ();
  716. OracleCommand select = connection.CreateCommand ();
  717. select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
  718. select.Transaction = transaction;
  719. Console.WriteLine (" Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
  720. Console.WriteLine (" Committing transaction ...");
  721. transaction.Commit ();
  722. select = connection.CreateCommand ();
  723. select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
  724. Console.WriteLine ("Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
  725. transaction = connection.BeginTransaction ();
  726. OracleCommand delete = connection.CreateCommand ();
  727. delete.Transaction = transaction;
  728. delete.CommandText = "DELETE FROM EMP WHERE EMPNO = 8787";
  729. delete.ExecuteNonQuery ();
  730. transaction.Commit ();
  731. }
  732. public static void ParameterTest2 (OracleConnection connection)
  733. {
  734. Console.WriteLine(" Setting NLS_DATE_FORMAT...");
  735. OracleCommand cmd2 = connection.CreateCommand();
  736. cmd2.CommandText = "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'";
  737. cmd2.ExecuteNonQuery ();
  738. Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
  739. try {
  740. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE7";
  741. cmd2.ExecuteNonQuery ();
  742. }
  743. catch(OracleException oe1) {
  744. // ignore if table already exists
  745. }
  746. Console.WriteLine(" Create table MONO_TEST_TABLE7...");
  747. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE7(" +
  748. " COL1 VARCHAR2(8) NOT NULL, " +
  749. " COL2 VARCHAR2(32), " +
  750. " COL3 NUMBER(18,2), " +
  751. " COL4 NUMBER(18,2), " +
  752. " COL5 DATE NOT NULL, " +
  753. " COL6 DATE, " +
  754. " COL7 BLOB NOT NULL, " +
  755. " COL8 BLOB, " +
  756. " COL9 CLOB NOT NULL, " +
  757. " COL10 CLOB " +
  758. ")";
  759. cmd2.ExecuteNonQuery ();
  760. Console.WriteLine(" COMMIT...");
  761. cmd2.CommandText = "COMMIT";
  762. cmd2.ExecuteNonQuery ();
  763. Console.WriteLine(" create insert command...");
  764. OracleTransaction trans = connection.BeginTransaction ();
  765. OracleCommand cmd = connection.CreateCommand ();
  766. cmd.Transaction = trans;
  767. cmd.CommandText = "INSERT INTO MONO_TEST_TABLE7 " +
  768. "(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) " +
  769. "VALUES(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10)";
  770. Console.WriteLine(" Add parameters...");
  771. OracleParameter parm1 = cmd.Parameters.Add (":P1", OracleType.VarChar, 8);
  772. OracleParameter parm2 = cmd.Parameters.Add (":P2", OracleType.VarChar, 32);
  773. OracleParameter parm3 = cmd.Parameters.Add (":P3", OracleType.Number);
  774. OracleParameter parm4 = cmd.Parameters.Add (":P4", OracleType.Number);
  775. OracleParameter parm5 = cmd.Parameters.Add (":P5", OracleType.DateTime);
  776. OracleParameter parm6 = cmd.Parameters.Add (":P6", OracleType.DateTime);
  777. // FIXME: fix BLOBs and CLOBs in OracleParameter
  778. OracleParameter parm7 = cmd.Parameters.Add (":P7", OracleType.Blob);
  779. OracleParameter parm8 = cmd.Parameters.Add (":P8", OracleType.Blob);
  780. OracleParameter parm9 = cmd.Parameters.Add (":P9", OracleType.Clob);
  781. OracleParameter parm10 = cmd.Parameters.Add (":P10", OracleType.Clob);
  782. // TODO: implement out, return, and ref parameters
  783. string s = "Mono";
  784. decimal d = 123456789012345.678M;
  785. DateTime dt = DateTime.Now;
  786. string clob = "Clob";
  787. byte[] blob = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };
  788. Console.WriteLine(" Set Values...");
  789. parm1.Value = s;
  790. parm2.Value = DBNull.Value;
  791. parm3.Value = d;
  792. parm4.Value = DBNull.Value;
  793. parm5.Value = dt;
  794. parm6.Value = DBNull.Value;
  795. parm7.Value = blob;
  796. parm8.Value = DBNull.Value;
  797. parm9.Value = clob;
  798. parm10.Value = DBNull.Value;
  799. Console.WriteLine(" ExecuteNonQuery...");
  800. cmd.ExecuteNonQuery ();
  801. trans.Commit();
  802. }
  803. public static void ParameterTest (OracleConnection connection)
  804. {
  805. Console.WriteLine(" Setting NLS_DATE_FORMAT...");
  806. OracleCommand cmd2 = connection.CreateCommand();
  807. cmd2.CommandText = "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'";
  808. cmd2.ExecuteNonQuery ();
  809. Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
  810. try {
  811. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE7";
  812. cmd2.ExecuteNonQuery ();
  813. }
  814. catch(OracleException oe1) {
  815. // ignore if table already exists
  816. }
  817. Console.WriteLine(" Create table MONO_TEST_TABLE7...");
  818. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE7(" +
  819. " COL1 VARCHAR2(8) NOT NULL, " +
  820. " COL2 VARCHAR2(32), " +
  821. " COL3 NUMBER(18,2) NOT NULL, " +
  822. " COL4 NUMBER(18,2), " +
  823. " COL5 DATE NOT NULL, " +
  824. " COL6 DATE, " +
  825. " COL7 BLOB NOT NULL, " +
  826. " COL8 BLOB, " +
  827. " COL9 CLOB NOT NULL, " +
  828. " COL10 CLOB " +
  829. ")";
  830. cmd2.ExecuteNonQuery ();
  831. Console.WriteLine(" COMMIT...");
  832. cmd2.CommandText = "COMMIT";
  833. cmd2.ExecuteNonQuery ();
  834. Console.WriteLine(" create insert command...");
  835. OracleTransaction trans = connection.BeginTransaction ();
  836. OracleCommand cmd = connection.CreateCommand ();
  837. cmd.Transaction = trans;
  838. cmd.CommandText = "INSERT INTO MONO_TEST_TABLE7 " +
  839. "(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) " +
  840. "VALUES(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10)";
  841. Console.WriteLine(" Add parameters...");
  842. OracleParameter parm1 = cmd.Parameters.Add (":P1", OracleType.VarChar, 8);
  843. OracleParameter parm2 = cmd.Parameters.Add (":P2", OracleType.VarChar, 32);
  844. OracleParameter parm3 = cmd.Parameters.Add (":P3", OracleType.Number);
  845. OracleParameter parm4 = cmd.Parameters.Add (":P4", OracleType.Number);
  846. OracleParameter parm5 = cmd.Parameters.Add (":P5", OracleType.DateTime);
  847. OracleParameter parm6 = cmd.Parameters.Add (":P6", OracleType.DateTime);
  848. // FIXME: fix BLOBs and CLOBs in OracleParameter
  849. OracleParameter parm7 = cmd.Parameters.Add (":P7", OracleType.Blob);
  850. OracleParameter parm8 = cmd.Parameters.Add (":P8", OracleType.Blob);
  851. OracleParameter parm9 = cmd.Parameters.Add (":P9", OracleType.Clob);
  852. OracleParameter parm10 = cmd.Parameters.Add (":P10", OracleType.Clob);
  853. // TODO: implement out, return, and ref parameters
  854. string s = "Mono";
  855. decimal d = 123456789012345.678M;
  856. DateTime dt = DateTime.Now;
  857. string clob = "Clob";
  858. byte[] blob = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };
  859. Console.WriteLine(" Set Values...");
  860. parm1.Value = s;
  861. parm2.Value = DBNull.Value;
  862. parm3.Value = d;
  863. parm4.Value = DBNull.Value;
  864. parm5.Value = dt;
  865. parm6.Value = DBNull.Value;
  866. parm7.Value = blob;
  867. parm8.Value = DBNull.Value;
  868. parm9.Value = clob;
  869. parm10.Value = DBNull.Value;
  870. Console.WriteLine(" ExecuteNonQuery...");
  871. cmd.ExecuteNonQuery ();
  872. trans.Commit();
  873. }
  874. public static void CLOBTest (OracleConnection connection)
  875. {
  876. Console.WriteLine (" BEGIN TRANSACTION ...");
  877. OracleTransaction transaction = connection.BeginTransaction ();
  878. Console.WriteLine (" Drop table CLOBTEST ...");
  879. try {
  880. OracleCommand cmd2 = connection.CreateCommand ();
  881. cmd2.Transaction = transaction;
  882. cmd2.CommandText = "DROP TABLE CLOBTEST";
  883. cmd2.ExecuteNonQuery ();
  884. }
  885. catch (OracleException oe1) {
  886. // ignore if table already exists
  887. }
  888. Console.WriteLine (" CREATE TABLE ...");
  889. OracleCommand create = connection.CreateCommand ();
  890. create.Transaction = transaction;
  891. create.CommandText = "CREATE TABLE CLOBTEST (CLOB_COLUMN CLOB)";
  892. create.ExecuteNonQuery ();
  893. Console.WriteLine (" INSERT RECORD ...");
  894. OracleCommand insert = connection.CreateCommand ();
  895. insert.Transaction = transaction;
  896. insert.CommandText = "INSERT INTO CLOBTEST VALUES (EMPTY_CLOB())";
  897. insert.ExecuteNonQuery ();
  898. OracleCommand select = connection.CreateCommand ();
  899. select.Transaction = transaction;
  900. select.CommandText = "SELECT CLOB_COLUMN FROM CLOBTEST FOR UPDATE";
  901. Console.WriteLine (" SELECTING A CLOB (CHARACTER) VALUE FROM CLOBTEST");
  902. OracleDataReader reader = select.ExecuteReader ();
  903. if (!reader.Read ())
  904. Console.WriteLine ("ERROR: RECORD NOT FOUND");
  905. Console.WriteLine (" TESTING OracleLob OBJECT ...");
  906. OracleLob lob = reader.GetOracleLob (0);
  907. Console.WriteLine (" LENGTH: {0}", lob.Length);
  908. Console.WriteLine (" CHUNK SIZE: {0}", lob.ChunkSize);
  909. UnicodeEncoding encoding = new UnicodeEncoding ();
  910. byte[] value = new byte [lob.Length * 2];
  911. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  912. Console.WriteLine (" UPDATING VALUE TO 'TEST ME!'");
  913. value = encoding.GetBytes ("TEST ME!");
  914. lob.Write (value, 0, value.Length);
  915. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  916. Console.WriteLine (" RE-READ VALUE...");
  917. lob.Seek (1, SeekOrigin.Begin);
  918. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  919. value = new byte [lob.Length * 2];
  920. lob.Read (value, 0, value.Length);
  921. Console.WriteLine (" VALUE: {0}", encoding.GetString (value));
  922. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  923. Console.WriteLine (" CLOSE OracleLob...");
  924. lob.Close ();
  925. Console.WriteLine (" CLOSING READER...");
  926. reader.Close ();
  927. transaction.Commit ();
  928. }
  929. public static void BLOBTest (OracleConnection connection)
  930. {
  931. Console.WriteLine (" BEGIN TRANSACTION ...");
  932. OracleTransaction transaction = connection.BeginTransaction ();
  933. Console.WriteLine (" Drop table BLOBTEST ...");
  934. try {
  935. OracleCommand cmd2 = connection.CreateCommand ();
  936. cmd2.Transaction = transaction;
  937. cmd2.CommandText = "DROP TABLE BLOBTEST";
  938. cmd2.ExecuteNonQuery ();
  939. }
  940. catch (OracleException oe1) {
  941. // ignore if table already exists
  942. }
  943. Console.WriteLine (" CREATE TABLE ...");
  944. OracleCommand create = connection.CreateCommand ();
  945. create.Transaction = transaction;
  946. create.CommandText = "CREATE TABLE BLOBTEST (BLOB_COLUMN BLOB)";
  947. create.ExecuteNonQuery ();
  948. Console.WriteLine (" INSERT RECORD ...");
  949. OracleCommand insert = connection.CreateCommand ();
  950. insert.Transaction = transaction;
  951. insert.CommandText = "INSERT INTO BLOBTEST VALUES (EMPTY_BLOB())";
  952. insert.ExecuteNonQuery ();
  953. OracleCommand select = connection.CreateCommand ();
  954. select.Transaction = transaction;
  955. select.CommandText = "SELECT BLOB_COLUMN FROM BLOBTEST FOR UPDATE";
  956. Console.WriteLine (" SELECTING A BLOB (Binary) VALUE FROM BLOBTEST");
  957. OracleDataReader reader = select.ExecuteReader ();
  958. if (!reader.Read ())
  959. Console.WriteLine ("ERROR: RECORD NOT FOUND");
  960. Console.WriteLine (" TESTING OracleLob OBJECT ...");
  961. OracleLob lob = reader.GetOracleLob (0);
  962. byte[] value = null;
  963. string bvalue = "";
  964. Console.WriteLine (" UPDATING VALUE");
  965. byte[] bytes = new byte[6];
  966. bytes[0] = 0x31;
  967. bytes[1] = 0x32;
  968. bytes[2] = 0x33;
  969. bytes[3] = 0x34;
  970. bytes[4] = 0x35;
  971. bytes[5] = 0x36;
  972. lob.Write (bytes, 0, bytes.Length);
  973. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  974. Console.WriteLine (" RE-READ VALUE...");
  975. lob.Seek (1, SeekOrigin.Begin);
  976. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  977. value = new byte [lob.Length];
  978. lob.Read (value, 0, value.Length);
  979. bvalue = "";
  980. if (value.GetType ().ToString ().Equals ("System.Byte[]"))
  981. bvalue = GetHexString (value);
  982. Console.WriteLine (" Bytes: " + bvalue);
  983. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  984. Console.WriteLine (" CLOSE OracleLob...");
  985. lob.Close ();
  986. Console.WriteLine (" CLOSING READER...");
  987. reader.Close ();
  988. transaction.Commit ();
  989. }
  990. static void Wait(string msg)
  991. {
  992. Console.WriteLine(msg);
  993. if (msg.Equals(""))
  994. Console.WriteLine("Waiting... Press Enter to continue...");
  995. Console.ReadLine();
  996. }
  997. // use this function to read a byte array into a string
  998. // for easy display of binary data, such as, a BLOB value
  999. public static string GetHexString (byte[] bytes)
  1000. {
  1001. string bvalue = "";
  1002. StringBuilder sb2 = new StringBuilder();
  1003. for (int z = 0; z < bytes.Length; z++) {
  1004. byte byt = bytes[z];
  1005. sb2.Append (byt.ToString("x"));
  1006. }
  1007. if (sb2.Length > 0)
  1008. bvalue = "0x" + sb2.ToString ();
  1009. return bvalue;
  1010. }
  1011. static void StoredProcedureTest1 (OracleConnection con)
  1012. {
  1013. // test stored procedure with no parameters
  1014. OracleCommand cmd2 = con.CreateCommand ();
  1015. Console.WriteLine(" Drop table MONO_TEST_TABLE1...");
  1016. try {
  1017. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE1";
  1018. cmd2.ExecuteNonQuery ();
  1019. }
  1020. catch(OracleException oe1) {
  1021. // ignore if table did not exist
  1022. }
  1023. Console.WriteLine(" Drop procedure SP_TEST1...");
  1024. try {
  1025. cmd2.CommandText = "DROP PROCEDURE SP_TEST1";
  1026. cmd2.ExecuteNonQuery ();
  1027. }
  1028. catch(OracleException oe1) {
  1029. // ignore if procedure did not exist
  1030. }
  1031. Console.WriteLine(" Create table MONO_TEST_TABLE1...");
  1032. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE1 (" +
  1033. " COL1 VARCHAR2(8), "+
  1034. " COL2 VARCHAR2(32))";
  1035. cmd2.ExecuteNonQuery ();
  1036. Console.WriteLine(" Create stored procedure SP_TEST1...");
  1037. cmd2.CommandText = "CREATE PROCEDURE SP_TEST1 " +
  1038. " IS " +
  1039. " BEGIN " +
  1040. " INSERT INTO MONO_TEST_TABLE1 (COL1,COL2) VALUES ('aaa','bbbb');" +
  1041. " COMMIT;" +
  1042. " END;";
  1043. cmd2.ExecuteNonQuery ();
  1044. Console.WriteLine("COMMIT...");
  1045. cmd2.CommandText = "COMMIT";
  1046. cmd2.ExecuteNonQuery ();
  1047. Console.WriteLine(" Call stored procedure sp_test1...");
  1048. OracleCommand cmd3 = con.CreateCommand ();
  1049. cmd3.CommandType = CommandType.StoredProcedure;
  1050. cmd3.CommandText = "sp_test1";
  1051. cmd3.ExecuteNonQuery ();
  1052. }
  1053. static void StoredProcedureTest2 (OracleConnection con)
  1054. {
  1055. // test stored procedure with 2 parameters
  1056. Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
  1057. OracleCommand cmd2 = con.CreateCommand ();
  1058. try {
  1059. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE2";
  1060. cmd2.ExecuteNonQuery ();
  1061. }
  1062. catch(OracleException oe1) {
  1063. // ignore if table already exists
  1064. }
  1065. Console.WriteLine(" Drop procedure SP_TEST2...");
  1066. try {
  1067. cmd2.CommandText = "DROP PROCEDURE SP_TEST2";
  1068. cmd2.ExecuteNonQuery ();
  1069. }
  1070. catch(OracleException oe1) {
  1071. // ignore if table already exists
  1072. }
  1073. Console.WriteLine(" Create table MONO_TEST_TABLE2...");
  1074. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE2 (" +
  1075. " COL1 VARCHAR2(8), "+
  1076. " COL2 VARCHAR2(32))";
  1077. cmd2.ExecuteNonQuery ();
  1078. Console.WriteLine(" Create stored procedure SP_TEST2...");
  1079. cmd2.CommandText = "CREATE PROCEDURE SP_TEST2(parm1 VARCHAR2,parm2 VARCHAR2) " +
  1080. " IS " +
  1081. " BEGIN " +
  1082. " INSERT INTO MONO_TEST_TABLE2 (COL1,COL2) VALUES (parm1,parm2);" +
  1083. " COMMIT;" +
  1084. " END;";
  1085. cmd2.ExecuteNonQuery ();
  1086. Console.WriteLine(" COMMIT...");
  1087. cmd2.CommandText = "COMMIT";
  1088. cmd2.ExecuteNonQuery ();
  1089. Console.WriteLine(" Call stored procedure SP_TEST2 with two parameters...");
  1090. OracleCommand cmd3 = con.CreateCommand ();
  1091. cmd3.CommandType = CommandType.StoredProcedure;
  1092. cmd3.CommandText = "sp_test2";
  1093. OracleParameter myParameter1 = new OracleParameter("parm1", OracleType.VarChar);
  1094. myParameter1.Value = "yyy13";
  1095. myParameter1.Size = 8;
  1096. myParameter1.Direction = ParameterDirection.Input;
  1097. OracleParameter myParameter2 = new OracleParameter("parm2", OracleType.VarChar);
  1098. myParameter2.Value = "iii13";
  1099. myParameter2.Size = 32;
  1100. myParameter2.Direction = ParameterDirection.Input;
  1101. cmd3.Parameters.Add (myParameter1);
  1102. cmd3.Parameters.Add (myParameter2);
  1103. cmd3.ExecuteNonQuery ();
  1104. }
  1105. static void OutParmTest1 (OracleConnection con)
  1106. {
  1107. // test stored procedure with 2 parameters
  1108. // 1. input varchar2
  1109. // 2. output varchar
  1110. OracleCommand cmd2 = null;
  1111. Console.WriteLine(" Drop procedure SP_OUTPUTPARMTEST1...");
  1112. try {
  1113. cmd2 = con.CreateCommand ();
  1114. cmd2.CommandText = "DROP PROCEDURE SP_OUTPUTPARMTEST1";
  1115. cmd2.ExecuteNonQuery ();
  1116. }
  1117. catch(OracleException oe1) {
  1118. // ignore if table already exists
  1119. }
  1120. Console.WriteLine(" Create stored procedure SP_OUTPUTPARMTEST1...");
  1121. // stored procedure concatenates strings
  1122. cmd2.CommandText =
  1123. "CREATE OR REPLACE PROCEDURE SP_TESTOUTPARM1(parm1 IN VARCHAR2,parm2 OUT VARCHAR2) " +
  1124. "IS " +
  1125. "BEGIN " +
  1126. " parm2 := 'one' || parm1 || 'three';" +
  1127. "END;";
  1128. cmd2.ExecuteNonQuery ();
  1129. Console.WriteLine(" COMMIT...");
  1130. cmd2.CommandText = "COMMIT";
  1131. cmd2.ExecuteNonQuery ();
  1132. Console.WriteLine(" Call stored procedure SP_TESTOUTPARM1 with two parameters...");
  1133. OracleCommand cmd3 = con.CreateCommand ();
  1134. cmd3.CommandType = CommandType.Text;
  1135. cmd3.CommandText =
  1136. "BEGIN " +
  1137. " SP_TESTOUTPARM1(:p1, :p2);" +
  1138. "END;";
  1139. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.VarChar);
  1140. myParameter1.Value = "two";
  1141. myParameter1.Size = 4;
  1142. myParameter1.Direction = ParameterDirection.Input;
  1143. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.VarChar);
  1144. myParameter2.Size = 12;
  1145. myParameter2.Direction = ParameterDirection.Output;
  1146. cmd3.Parameters.Add (myParameter1);
  1147. cmd3.Parameters.Add (myParameter2);
  1148. cmd3.ExecuteNonQuery ();
  1149. string outValue = (string) myParameter2.Value;
  1150. Console.WriteLine (" Out Value should be: onetwothree");
  1151. Console.WriteLine (" Out Value: " + outValue);
  1152. }
  1153. static void OutParmTest2 (OracleConnection con)
  1154. {
  1155. // test stored procedure with 2 parameters
  1156. // 1. input number(18,2)
  1157. // 2. output number(18,2)
  1158. OracleCommand cmd2 = null;
  1159. Console.WriteLine(" Drop procedure SP_OUTPUTPARMTEST2...");
  1160. try {
  1161. cmd2 = con.CreateCommand ();
  1162. cmd2.CommandText = "DROP PROCEDURE SP_OUTPUTPARMTEST2";
  1163. cmd2.ExecuteNonQuery ();
  1164. }
  1165. catch(OracleException oe1) {
  1166. // ignore if table already exists
  1167. }
  1168. Console.WriteLine(" Create stored procedure SP_OUTPUTPARMTEST2...");
  1169. // stored procedure addes two numbers
  1170. cmd2.CommandText =
  1171. "CREATE OR REPLACE PROCEDURE SP_TESTOUTPARM2(parm1 IN NUMBER,parm2 OUT NUMBER) " +
  1172. "IS " +
  1173. "BEGIN " +
  1174. " parm2 := parm1 + 3; " +
  1175. "END;";
  1176. cmd2.ExecuteNonQuery ();
  1177. Console.WriteLine(" COMMIT...");
  1178. cmd2.CommandText = "COMMIT";
  1179. cmd2.ExecuteNonQuery ();
  1180. Console.WriteLine(" Call stored procedure SP_TESTOUTPARM2 with two parameters...");
  1181. OracleCommand cmd3 = con.CreateCommand ();
  1182. cmd3.CommandType = CommandType.Text;
  1183. cmd3.CommandText =
  1184. "BEGIN " +
  1185. " SP_TESTOUTPARM2(:p1, :p2);" +
  1186. "END;";
  1187. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.Number);
  1188. myParameter1.Value = 2;
  1189. myParameter1.Direction = ParameterDirection.Input;
  1190. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.Number);
  1191. myParameter2.Direction = ParameterDirection.Output;
  1192. cmd3.Parameters.Add (myParameter1);
  1193. cmd3.Parameters.Add (myParameter2);
  1194. cmd3.ExecuteNonQuery ();
  1195. decimal outValue = (decimal) myParameter2.Value;
  1196. Console.WriteLine (" Out Value should be: 5");
  1197. Console.WriteLine (" Out Value: {0}", outValue);
  1198. }
  1199. static void OutParmTest3 (OracleConnection con)
  1200. {
  1201. // test stored procedure with 2 parameters
  1202. // 1. input date
  1203. // 2. output date
  1204. OracleCommand cmd2 = null;
  1205. Console.WriteLine(" Drop procedure SP_OUTPUTPARMTEST3...");
  1206. try {
  1207. cmd2 = con.CreateCommand ();
  1208. cmd2.CommandText = "DROP PROCEDURE SP_OUTPUTPARMTEST3";
  1209. cmd2.ExecuteNonQuery ();
  1210. }
  1211. catch(OracleException oe1) {
  1212. // ignore if table already exists
  1213. }
  1214. Console.WriteLine(" Create stored procedure SP_OUTPUTPARMTEST3...");
  1215. // stored procedure adds 3 days to date
  1216. cmd2.CommandText =
  1217. "CREATE OR REPLACE PROCEDURE SP_TESTOUTPARM3(parm1 IN DATE,parm2 OUT DATE) " +
  1218. "IS " +
  1219. "BEGIN " +
  1220. " parm2 := parm1 + 3; " +
  1221. "END;";
  1222. cmd2.ExecuteNonQuery ();
  1223. Console.WriteLine(" COMMIT...");
  1224. cmd2.CommandText = "COMMIT";
  1225. cmd2.ExecuteNonQuery ();
  1226. Console.WriteLine(" Call stored procedure SP_TESTOUTPARM3 with two parameters...");
  1227. OracleCommand cmd3 = con.CreateCommand ();
  1228. cmd3.CommandType = CommandType.Text;
  1229. cmd3.CommandText =
  1230. "BEGIN " +
  1231. " SP_TESTOUTPARM3(:p1, :p2);" +
  1232. "END;";
  1233. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.DateTime);
  1234. myParameter1.Value = new DateTime(2004,12,15);
  1235. myParameter1.Direction = ParameterDirection.Input;
  1236. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.DateTime);
  1237. myParameter2.Direction = ParameterDirection.Output;
  1238. cmd3.Parameters.Add (myParameter1);
  1239. cmd3.Parameters.Add (myParameter2);
  1240. cmd3.ExecuteNonQuery ();
  1241. DateTime outValue = (DateTime) myParameter2.Value;
  1242. Console.WriteLine (" Out Value should be: 2004-12-18");
  1243. Console.WriteLine (" Out Value: {0}", outValue.ToString ("yyyy-mm-dd"));
  1244. }
  1245. static void ShowConnectionProperties (OracleConnection con)
  1246. {
  1247. try {
  1248. Console.WriteLine ("ServerVersion: " + con.ServerVersion);
  1249. } catch (System.InvalidOperationException ioe) {
  1250. Console.WriteLine ("InvalidOperationException caught.");
  1251. Console.WriteLine ("Message: " + ioe.Message);
  1252. }
  1253. Console.WriteLine ("DataSource: " + con.DataSource);
  1254. }
  1255. static void NullAggregateTest (OracleConnection con)
  1256. {
  1257. Console.WriteLine(" Drop table MONO_TEST_TABLE3...");
  1258. OracleCommand cmd2 = con.CreateCommand ();
  1259. try {
  1260. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE3";
  1261. cmd2.ExecuteNonQuery ();
  1262. }
  1263. catch(OracleException oe1) {
  1264. // ignore if table already exists
  1265. }
  1266. Console.WriteLine(" Create table MONO_TEST_TABLE3...");
  1267. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE3 (" +
  1268. " COL1 VARCHAR2(8), "+
  1269. " COL2 VARCHAR2(32))";
  1270. cmd2.ExecuteNonQuery ();
  1271. Console.WriteLine(" Insert some rows into table MONO_TEST_TABLE3...");
  1272. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('1','one')";
  1273. cmd2.ExecuteNonQuery ();
  1274. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('1','uno')";
  1275. cmd2.ExecuteNonQuery ();
  1276. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3','three')";
  1277. cmd2.ExecuteNonQuery ();
  1278. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3', null)";
  1279. cmd2.ExecuteNonQuery ();
  1280. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3','few')";
  1281. cmd2.ExecuteNonQuery ();
  1282. Console.WriteLine(" ExecuteScalar...");
  1283. cmd2.CommandText = "SELECT COL1, COUNT(COL2) AS MAX_COL1 FROM MONO_TEST_TABLE3 GROUP BY COL1";
  1284. OracleDataReader reader = cmd2.ExecuteReader ();
  1285. Console.WriteLine (" Read...");
  1286. while (reader.Read ()) {
  1287. object obj0 = reader.GetValue (0);
  1288. Console.WriteLine("Value 0: " + obj0.ToString ());
  1289. object obj1 = reader.GetValue (1);
  1290. Console.WriteLine("Value 1: " + obj1.ToString ());
  1291. Console.WriteLine (" Read...");
  1292. }
  1293. Console.WriteLine (" No more records.");
  1294. }
  1295. static void OnInfoMessage (object sender, OracleInfoMessageEventArgs e)
  1296. {
  1297. Console.WriteLine("InfoMessage Message: " + e.Message.ToString());
  1298. Console.WriteLine("InfoMessage Code: " + e.Code.ToString());
  1299. Console.WriteLine("InfoMessage Source: " + e.Source.ToString());
  1300. }
  1301. static void OnStateChange (object sender, StateChangeEventArgs e)
  1302. {
  1303. Console.WriteLine("StateChange CurrentSate:" + e.CurrentState.ToString ());
  1304. Console.WriteLine("StateChange OriginalState:" + e.OriginalState.ToString ());
  1305. }
  1306. public static void ConnectionPoolingTest1 () {
  1307. Console.WriteLine("Start Connection Pooling Test 1...");
  1308. OracleConnection[] connections = null;
  1309. int maxCon = MAX_CONNECTIONS + 1; // add 1 more over the max connections to cause it to wait for the next available connection
  1310. int i = 0;
  1311. try {
  1312. connections = new OracleConnection[maxCon];
  1313. for (i = 0; i < maxCon; i++) {
  1314. Console.WriteLine(" Open connection: {0}", i);
  1315. connections[i] = new OracleConnection(conStr);
  1316. connections[i].Open ();
  1317. }
  1318. } catch (InvalidOperationException e) {
  1319. Console.WriteLine("Expected exception InvalidOperationException caught.");
  1320. Console.WriteLine(e);
  1321. }
  1322. for (i = 0; i < maxCon; i++) {
  1323. if (connections[i] != null) {
  1324. Console.WriteLine(" Close connection: {0}", i);
  1325. if (connections[i].State == ConnectionState.Open)
  1326. connections[i].Close ();
  1327. connections[i].Dispose ();
  1328. connections[i] = null;
  1329. }
  1330. }
  1331. connections = null;
  1332. Console.WriteLine("Done Connection Pooling Test 1.");
  1333. }
  1334. public static void ConnectionPoolingTest2 () {
  1335. Console.WriteLine("Start Connection Pooling Test 2...");
  1336. OracleConnection[] connections = null;
  1337. int maxCon = MAX_CONNECTIONS;
  1338. int i = 0;
  1339. connections = new OracleConnection[maxCon];
  1340. for (i = 0; i < maxCon; i++) {
  1341. Console.WriteLine(" Open connection: {0}", i);
  1342. connections[i] = new OracleConnection(conStr);
  1343. connections[i].Open ();
  1344. }
  1345. Console.WriteLine("Start another thread...");
  1346. t = new Thread(new ThreadStart(AnotherThreadProc));
  1347. t.Start ();
  1348. Console.WriteLine("Sleep...");
  1349. Thread.Sleep(100);
  1350. Console.WriteLine("Closing...");
  1351. for (i = 0; i < maxCon; i++) {
  1352. if (connections[i] != null) {
  1353. Console.WriteLine(" Close connection: {0}", i);
  1354. if (connections[i].State == ConnectionState.Open)
  1355. connections[i].Close ();
  1356. connections[i].Dispose ();
  1357. connections[i] = null;
  1358. }
  1359. }
  1360. connections = null;
  1361. }
  1362. private static void AnotherThreadProc () {
  1363. Console.WriteLine("Open connection via another thread...");
  1364. OracleConnection[] connections = null;
  1365. int maxCon = MAX_CONNECTIONS;
  1366. int i = 0;
  1367. connections = new OracleConnection[maxCon];
  1368. for (i = 0; i < maxCon; i++) {
  1369. Console.WriteLine(" Open connection: {0}", i);
  1370. connections[i] = new OracleConnection(conStr);
  1371. connections[i].Open ();
  1372. }
  1373. Console.WriteLine("Done Connection Pooling Test 2.");
  1374. System.Environment.Exit (0);
  1375. }
  1376. [STAThread]
  1377. static void Main(string[] args)
  1378. {
  1379. if(args.Length != 3) {
  1380. Console.WriteLine("Usage: mono TestOracleClient database userid password");
  1381. return;
  1382. }
  1383. string connectionString = String.Format(
  1384. "Data Source={0};" +
  1385. "User ID={1};" +
  1386. "Password={2}",
  1387. args[0], args[1], args[2]);
  1388. conStr = connectionString;
  1389. OracleConnection con1 = new OracleConnection();
  1390. ShowConnectionProperties (con1);
  1391. con1.ConnectionString = connectionString;
  1392. con1.InfoMessage += new OracleInfoMessageEventHandler (OnInfoMessage);
  1393. con1.StateChange += new StateChangeEventHandler (OnStateChange);
  1394. Console.WriteLine("Opening...");
  1395. con1.Open ();
  1396. Console.WriteLine("Opened.");
  1397. ShowConnectionProperties (con1);
  1398. Console.WriteLine ("Mono Oracle Test BEGIN ...");
  1399. MonoTest (con1);
  1400. Console.WriteLine ("Mono Oracle Test END ...");
  1401. Wait ("");
  1402. Console.WriteLine ("LOB Test BEGIN...");
  1403. CLOBTest (con1);
  1404. BLOBTest (con1);
  1405. Console.WriteLine ("LOB Test END.");
  1406. Wait ("");
  1407. Console.WriteLine ("Read Simple Test BEGIN - scott.emp...");
  1408. ReadSimpleTest(con1, "SELECT e.*, e.rowid FROM scott.emp e");
  1409. Console.WriteLine ("Read Simple Test END - scott.emp");
  1410. Wait ("");
  1411. Console.WriteLine ("DataAdapter Test BEGIN...");
  1412. DataAdapterTest(con1);
  1413. Console.WriteLine ("DataAdapter Test END.");
  1414. Wait ("");
  1415. Console.WriteLine ("DataAdapter Test 2 BEGIN...");
  1416. DataAdapterTest2(con1);
  1417. Console.WriteLine ("DataAdapter Test 2 END.");
  1418. Wait ("");
  1419. Console.WriteLine ("Rollback Test BEGIN...");
  1420. RollbackTest(con1);
  1421. Console.WriteLine ("Rollback Test END.");
  1422. Wait ("");
  1423. Console.WriteLine ("Commit Test BEGIN...");
  1424. CommitTest(con1);
  1425. Console.WriteLine ("Commit Test END.");
  1426. Wait ("");
  1427. Console.WriteLine ("Parameter Test BEGIN...");
  1428. ParameterTest(con1);
  1429. ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE7");
  1430. Console.WriteLine ("Parameter Test END.");
  1431. Wait ("");
  1432. Console.WriteLine ("Stored Proc Test 1 BEGIN...");
  1433. StoredProcedureTest1 (con1);
  1434. ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE1");
  1435. Console.WriteLine ("Stored Proc Test 1 END...");
  1436. Wait ("");
  1437. Console.WriteLine ("Stored Proc Test 2 BEGIN...");
  1438. StoredProcedureTest2 (con1);
  1439. ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE2");
  1440. Console.WriteLine ("Stored Proc Test 2 END...");
  1441. Console.WriteLine ("Out Parameter and PL/SQL Block Test 1 BEGIN...");
  1442. OutParmTest1 (con1);
  1443. Console.WriteLine ("Out Parameter and PL/SQL Block Test 1 END...");
  1444. Console.WriteLine ("Out Parameter and PL/SQL Block Test 2 BEGIN...");
  1445. OutParmTest2 (con1);
  1446. Console.WriteLine ("Out Parameter and PL/SQL Block Test 2 END...");
  1447. Console.WriteLine ("Out Parameter and PL/SQL Block Test 3 BEGIN...");
  1448. OutParmTest3 (con1);
  1449. Console.WriteLine ("Out Parameter and PL/SQL Block Test 3 END...");
  1450. Wait ("");
  1451. Console.WriteLine ("Test a Non Query using Execute Reader BEGIN...");
  1452. TestNonQueryUsingExecuteReader (con1);
  1453. Console.WriteLine ("Test a Non Query using Execute Reader END...");
  1454. Wait ("");
  1455. Console.WriteLine ("Null Aggregate Warning BEGIN test...");
  1456. NullAggregateTest (con1);
  1457. Console.WriteLine ("Null Aggregate Warning END test...");
  1458. Console.WriteLine("Closing...");
  1459. con1.Close ();
  1460. Console.WriteLine("Closed.");
  1461. //conStr = conStr + ";pooling=true;min pool size=4;max pool size=" + MAX_CONNECTIONS.ToString ();
  1462. //ConnectionPoolingTest1 ();
  1463. //ConnectionPoolingTest2 ();
  1464. Console.WriteLine("Done.");
  1465. }
  1466. }
  1467. }