TestOracleClient.cs 91 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695
  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) {
  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 SCOTT.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) {
  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. Console.WriteLine(" RowsAffected after close: " + reader.RecordsAffected.ToString());
  623. trans.Commit();
  624. }
  625. catch(OracleException e) {
  626. Console.WriteLine(" OracleException caught: " + e.Message);
  627. trans.Commit();
  628. }
  629. Console.WriteLine(" Create table mono_adapter_test...");
  630. cmd.CommandText = "CREATE TABLE MONO_ADAPTER_TEST ( " +
  631. " varchar2_value VarChar2(32), " +
  632. " number_whole_value Number(18,0) PRIMARY KEY ) ";
  633. trans = con.BeginTransaction();
  634. cmd.Transaction = trans;
  635. reader = cmd.ExecuteReader();
  636. Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
  637. reader.Read();
  638. Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
  639. reader.Close();
  640. Console.WriteLine(" RowsAffected after close: " + reader.RecordsAffected.ToString());
  641. trans.Commit();
  642. Console.WriteLine("Insert into table mono_adapter_test...");
  643. string sql =
  644. "INSERT INTO MONO_ADAPTER_TEST " +
  645. "(VARCHAR2_VALUE,NUMBER_WHOLE_VALUE) " +
  646. "VALUES(:p1,:p2)";
  647. OracleCommand cmd2 = con.CreateCommand();
  648. trans = con.BeginTransaction();
  649. cmd2.Transaction = trans;
  650. cmd2.CommandText = sql;
  651. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.VarChar, 32);
  652. myParameter1.Direction = ParameterDirection.Input;
  653. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.Number);
  654. myParameter2.Direction = ParameterDirection.Input;
  655. myParameter2.Value = 182;
  656. myParameter1.Value = "Mono";
  657. cmd2.Parameters.Add (myParameter1);
  658. cmd2.Parameters.Add (myParameter2);
  659. // insert 1 record
  660. reader = cmd2.ExecuteReader();
  661. Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
  662. reader.Read();
  663. Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
  664. reader.Close();
  665. Console.WriteLine(" RowsAffected after close: " + reader.RecordsAffected.ToString());
  666. // insert another record
  667. Console.WriteLine(" Insert another record...");
  668. myParameter2.Value = 183;
  669. myParameter1.Value = "Oracle";
  670. reader = cmd2.ExecuteReader();
  671. Console.WriteLine(" RowsAffected before read: " + reader.RecordsAffected.ToString());
  672. reader.Read();
  673. Console.WriteLine(" RowsAffected after read: " + reader.RecordsAffected.ToString());
  674. reader.Close();
  675. Console.WriteLine(" RowsAffected after close: " + reader.RecordsAffected.ToString());
  676. trans.Commit();
  677. trans = null;
  678. ReadSimpleTest(con, "SELECT * FROM MONO_ADAPTER_TEST");
  679. }
  680. static void CommitCursor (OracleConnection con)
  681. {
  682. OracleCommand cmd = con.CreateCommand ();
  683. cmd.CommandText = "COMMIT";
  684. cmd.ExecuteNonQuery ();
  685. cmd.Dispose ();
  686. cmd = null;
  687. }
  688. static void RollbackTest (OracleConnection connection)
  689. {
  690. OracleTransaction transaction = connection.BeginTransaction ();
  691. OracleCommand insert = connection.CreateCommand ();
  692. insert.Transaction = transaction;
  693. insert.CommandText = "INSERT INTO SCOTT.EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
  694. Console.WriteLine (" Inserting record ...");
  695. insert.ExecuteNonQuery ();
  696. OracleCommand select = connection.CreateCommand ();
  697. select.CommandText = "SELECT COUNT(*) FROM SCOTT.EMP WHERE EMPNO = 8787";
  698. select.Transaction = transaction;
  699. OracleDataReader reader = select.ExecuteReader ();
  700. reader.Read ();
  701. Console.WriteLine (" Row count SHOULD BE 1, VALUE IS {0}", reader.GetValue (0));
  702. reader.Close ();
  703. Console.WriteLine (" Rolling back transaction ...");
  704. transaction.Rollback ();
  705. select = connection.CreateCommand ();
  706. select.CommandText = "SELECT COUNT(*) FROM SCOTT.EMP WHERE EMPNO = 8787";
  707. reader = select.ExecuteReader ();
  708. reader.Read ();
  709. Console.WriteLine (" Row count SHOULD BE 0, VALUE IS {0}", reader.GetValue (0));
  710. reader.Close ();
  711. }
  712. static void CommitTest (OracleConnection connection)
  713. {
  714. OracleTransaction transaction = connection.BeginTransaction ();
  715. OracleCommand insert = connection.CreateCommand ();
  716. insert.Transaction = transaction;
  717. insert.CommandText = "INSERT INTO SCOTT.EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
  718. Console.WriteLine (" Inserting record ...");
  719. insert.ExecuteNonQuery ();
  720. OracleCommand select = connection.CreateCommand ();
  721. select.CommandText = "SELECT COUNT(*) FROM SCOTT.EMP WHERE EMPNO = 8787";
  722. select.Transaction = transaction;
  723. Console.WriteLine (" Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
  724. Console.WriteLine (" Committing transaction ...");
  725. transaction.Commit ();
  726. select = connection.CreateCommand ();
  727. select.CommandText = "SELECT COUNT(*) FROM SCOTT.EMP WHERE EMPNO = 8787";
  728. Console.WriteLine ("Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
  729. transaction = connection.BeginTransaction ();
  730. OracleCommand delete = connection.CreateCommand ();
  731. delete.Transaction = transaction;
  732. delete.CommandText = "DELETE FROM SCOTT.EMP WHERE EMPNO = 8787";
  733. delete.ExecuteNonQuery ();
  734. transaction.Commit ();
  735. }
  736. public static void ParameterTest2 (OracleConnection connection)
  737. {
  738. Console.WriteLine(" Setting NLS_DATE_FORMAT...");
  739. OracleCommand cmd2 = connection.CreateCommand();
  740. cmd2.CommandText = "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'";
  741. cmd2.ExecuteNonQuery ();
  742. Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
  743. try {
  744. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE7";
  745. cmd2.ExecuteNonQuery ();
  746. }
  747. catch(OracleException) {
  748. // ignore if table already exists
  749. }
  750. Console.WriteLine(" Create table MONO_TEST_TABLE7...");
  751. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE7(" +
  752. " COL1 VARCHAR2(8) NOT NULL, " +
  753. " COL2 VARCHAR2(32), " +
  754. " COL3 NUMBER(18,2), " +
  755. " COL4 NUMBER(18,2), " +
  756. " COL5 DATE NOT NULL, " +
  757. " COL6 DATE, " +
  758. " COL7 BLOB NOT NULL, " +
  759. " COL8 BLOB, " +
  760. " COL9 CLOB NOT NULL, " +
  761. " COL10 CLOB " +
  762. ")";
  763. cmd2.ExecuteNonQuery ();
  764. Console.WriteLine(" COMMIT...");
  765. cmd2.CommandText = "COMMIT";
  766. cmd2.ExecuteNonQuery ();
  767. Console.WriteLine(" create insert command...");
  768. OracleTransaction trans = connection.BeginTransaction ();
  769. OracleCommand cmd = connection.CreateCommand ();
  770. cmd.Transaction = trans;
  771. cmd.CommandText = "INSERT INTO MONO_TEST_TABLE7 " +
  772. "(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) " +
  773. "VALUES(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10)";
  774. Console.WriteLine(" Add parameters...");
  775. OracleParameter parm1 = cmd.Parameters.Add (":P1", OracleType.VarChar, 8);
  776. OracleParameter parm2 = cmd.Parameters.Add (":P2", OracleType.VarChar, 32);
  777. OracleParameter parm3 = cmd.Parameters.Add (":P3", OracleType.Number);
  778. OracleParameter parm4 = cmd.Parameters.Add (":P4", OracleType.Number);
  779. OracleParameter parm5 = cmd.Parameters.Add (":P5", OracleType.DateTime);
  780. OracleParameter parm6 = cmd.Parameters.Add (":P6", OracleType.DateTime);
  781. // FIXME: fix BLOBs and CLOBs in OracleParameter
  782. OracleParameter parm7 = cmd.Parameters.Add (":P7", OracleType.Blob);
  783. OracleParameter parm8 = cmd.Parameters.Add (":P8", OracleType.Blob);
  784. OracleParameter parm9 = cmd.Parameters.Add (":P9", OracleType.Clob);
  785. OracleParameter parm10 = cmd.Parameters.Add (":P10", OracleType.Clob);
  786. // TODO: implement out, return, and ref parameters
  787. string s = "Mono";
  788. decimal d = 123456789012345.678M;
  789. DateTime dt = DateTime.Now;
  790. string clob = "Clob";
  791. byte[] blob = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };
  792. Console.WriteLine(" Set Values...");
  793. parm1.Value = s;
  794. parm2.Value = DBNull.Value;
  795. parm3.Value = d;
  796. parm4.Value = DBNull.Value;
  797. parm5.Value = dt;
  798. parm6.Value = DBNull.Value;
  799. parm7.Value = blob;
  800. parm8.Value = DBNull.Value;
  801. parm9.Value = clob;
  802. parm10.Value = DBNull.Value;
  803. Console.WriteLine(" ExecuteNonQuery...");
  804. cmd.ExecuteNonQuery ();
  805. trans.Commit();
  806. }
  807. public static void ParameterTest (OracleConnection connection)
  808. {
  809. Console.WriteLine(" Setting NLS_DATE_FORMAT...");
  810. OracleCommand cmd2 = connection.CreateCommand();
  811. cmd2.CommandText = "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'";
  812. cmd2.ExecuteNonQuery ();
  813. Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
  814. try {
  815. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE7";
  816. cmd2.ExecuteNonQuery ();
  817. }
  818. catch(OracleException) {
  819. // ignore if table already exists
  820. }
  821. Console.WriteLine(" Create table MONO_TEST_TABLE7...");
  822. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE7(" +
  823. " COL1 VARCHAR2(8) NOT NULL, " +
  824. " COL2 VARCHAR2(32), " +
  825. " COL3 NUMBER(18,2) NOT NULL, " +
  826. " COL4 NUMBER(18,2), " +
  827. " COL5 DATE NOT NULL, " +
  828. " COL6 DATE, " +
  829. " COL7 BLOB NOT NULL, " +
  830. " COL8 BLOB, " +
  831. " COL9 CLOB NOT NULL, " +
  832. " COL10 CLOB " +
  833. ")";
  834. cmd2.ExecuteNonQuery ();
  835. Console.WriteLine(" COMMIT...");
  836. cmd2.CommandText = "COMMIT";
  837. cmd2.ExecuteNonQuery ();
  838. Console.WriteLine(" create insert command...");
  839. OracleTransaction trans = connection.BeginTransaction ();
  840. OracleCommand cmd = connection.CreateCommand ();
  841. cmd.Transaction = trans;
  842. cmd.CommandText = "INSERT INTO MONO_TEST_TABLE7 " +
  843. "(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) " +
  844. "VALUES(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10)";
  845. Console.WriteLine(" Add parameters...");
  846. OracleParameter parm1 = cmd.Parameters.Add (":P1", OracleType.VarChar, 8);
  847. OracleParameter parm2 = cmd.Parameters.Add (":P2", OracleType.VarChar, 32);
  848. OracleParameter parm3 = cmd.Parameters.Add (":P3", OracleType.Number);
  849. OracleParameter parm4 = cmd.Parameters.Add (":P4", OracleType.Number);
  850. OracleParameter parm5 = cmd.Parameters.Add (":P5", OracleType.DateTime);
  851. OracleParameter parm6 = cmd.Parameters.Add (":P6", OracleType.DateTime);
  852. // FIXME: fix BLOBs and CLOBs in OracleParameter
  853. OracleParameter parm7 = cmd.Parameters.Add (":P7", OracleType.Blob);
  854. OracleParameter parm8 = cmd.Parameters.Add (":P8", OracleType.Blob);
  855. OracleParameter parm9 = cmd.Parameters.Add (":P9", OracleType.Clob);
  856. OracleParameter parm10 = cmd.Parameters.Add (":P10", OracleType.Clob);
  857. // TODO: implement out, return, and ref parameters
  858. string s = "Mono";
  859. decimal d = 123456789012345.678M;
  860. DateTime dt = DateTime.Now;
  861. string clob = "Clob";
  862. byte[] blob = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };
  863. Console.WriteLine(" Set Values...");
  864. parm1.Value = s;
  865. parm2.Value = DBNull.Value;
  866. parm3.Value = d;
  867. parm4.Value = DBNull.Value;
  868. parm5.Value = dt;
  869. parm6.Value = DBNull.Value;
  870. parm7.Value = blob;
  871. parm8.Value = DBNull.Value;
  872. parm9.Value = clob;
  873. parm10.Value = DBNull.Value;
  874. Console.WriteLine(" ExecuteNonQuery...");
  875. cmd.ExecuteNonQuery ();
  876. trans.Commit();
  877. }
  878. public static void CLOBTest (OracleConnection connection)
  879. {
  880. Console.WriteLine (" BEGIN TRANSACTION ...");
  881. OracleTransaction transaction = connection.BeginTransaction ();
  882. Console.WriteLine (" Drop table CLOBTEST ...");
  883. try {
  884. OracleCommand cmd2 = connection.CreateCommand ();
  885. cmd2.Transaction = transaction;
  886. cmd2.CommandText = "DROP TABLE CLOBTEST";
  887. cmd2.ExecuteNonQuery ();
  888. }
  889. catch (OracleException) {
  890. // ignore if table already exists
  891. }
  892. Console.WriteLine (" CREATE TABLE ...");
  893. OracleCommand create = connection.CreateCommand ();
  894. create.Transaction = transaction;
  895. create.CommandText = "CREATE TABLE CLOBTEST (CLOB_COLUMN CLOB)";
  896. create.ExecuteNonQuery ();
  897. Console.WriteLine (" INSERT RECORD ...");
  898. OracleCommand insert = connection.CreateCommand ();
  899. insert.Transaction = transaction;
  900. insert.CommandText = "INSERT INTO CLOBTEST VALUES (EMPTY_CLOB())";
  901. insert.ExecuteNonQuery ();
  902. OracleCommand select = connection.CreateCommand ();
  903. select.Transaction = transaction;
  904. select.CommandText = "SELECT CLOB_COLUMN FROM CLOBTEST FOR UPDATE";
  905. Console.WriteLine (" SELECTING A CLOB (CHARACTER) VALUE FROM CLOBTEST");
  906. OracleDataReader reader = select.ExecuteReader ();
  907. if (!reader.Read ())
  908. Console.WriteLine ("ERROR: RECORD NOT FOUND");
  909. Console.WriteLine (" TESTING OracleLob OBJECT ...");
  910. OracleLob lob = reader.GetOracleLob (0);
  911. Console.WriteLine (" LENGTH: {0}", lob.Length);
  912. Console.WriteLine (" CHUNK SIZE: {0}", lob.ChunkSize);
  913. UnicodeEncoding encoding = new UnicodeEncoding ();
  914. byte[] value = new byte [lob.Length * 2];
  915. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  916. Console.WriteLine (" UPDATING VALUE TO 'TEST ME!'");
  917. value = encoding.GetBytes ("TEST ME!");
  918. lob.Write (value, 0, value.Length);
  919. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  920. Console.WriteLine (" RE-READ VALUE...");
  921. lob.Seek (1, SeekOrigin.Begin);
  922. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  923. value = new byte [lob.Length * 2];
  924. lob.Read (value, 0, value.Length);
  925. Console.WriteLine (" VALUE: {0}", encoding.GetString (value));
  926. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  927. Console.WriteLine (" CLOSE OracleLob...");
  928. lob.Close ();
  929. Console.WriteLine (" CLOSING READER...");
  930. reader.Close ();
  931. transaction.Commit ();
  932. }
  933. public static void BLOBTest (OracleConnection connection)
  934. {
  935. Console.WriteLine (" BEGIN TRANSACTION ...");
  936. OracleTransaction transaction = connection.BeginTransaction ();
  937. Console.WriteLine (" Drop table BLOBTEST ...");
  938. try {
  939. OracleCommand cmd2 = connection.CreateCommand ();
  940. cmd2.Transaction = transaction;
  941. cmd2.CommandText = "DROP TABLE BLOBTEST";
  942. cmd2.ExecuteNonQuery ();
  943. }
  944. catch (OracleException) {
  945. // ignore if table already exists
  946. }
  947. Console.WriteLine (" CREATE TABLE ...");
  948. OracleCommand create = connection.CreateCommand ();
  949. create.Transaction = transaction;
  950. create.CommandText = "CREATE TABLE BLOBTEST (BLOB_COLUMN BLOB)";
  951. create.ExecuteNonQuery ();
  952. Console.WriteLine (" INSERT RECORD ...");
  953. OracleCommand insert = connection.CreateCommand ();
  954. insert.Transaction = transaction;
  955. insert.CommandText = "INSERT INTO BLOBTEST VALUES (EMPTY_BLOB())";
  956. insert.ExecuteNonQuery ();
  957. OracleCommand select = connection.CreateCommand ();
  958. select.Transaction = transaction;
  959. select.CommandText = "SELECT BLOB_COLUMN FROM BLOBTEST FOR UPDATE";
  960. Console.WriteLine (" SELECTING A BLOB (Binary) VALUE FROM BLOBTEST");
  961. OracleDataReader reader = select.ExecuteReader ();
  962. if (!reader.Read ())
  963. Console.WriteLine ("ERROR: RECORD NOT FOUND");
  964. Console.WriteLine (" TESTING OracleLob OBJECT ...");
  965. OracleLob lob = reader.GetOracleLob (0);
  966. byte[] value = null;
  967. string bvalue = "";
  968. Console.WriteLine (" UPDATING VALUE");
  969. byte[] bytes = new byte[6];
  970. bytes[0] = 0x31;
  971. bytes[1] = 0x32;
  972. bytes[2] = 0x33;
  973. bytes[3] = 0x34;
  974. bytes[4] = 0x35;
  975. bytes[5] = 0x36;
  976. lob.Write (bytes, 0, bytes.Length);
  977. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  978. Console.WriteLine (" RE-READ VALUE...");
  979. lob.Seek (1, SeekOrigin.Begin);
  980. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  981. value = new byte [lob.Length];
  982. lob.Read (value, 0, value.Length);
  983. bvalue = "";
  984. if (value.GetType ().ToString ().Equals ("System.Byte[]"))
  985. bvalue = GetHexString (value);
  986. Console.WriteLine (" Bytes: " + bvalue);
  987. Console.WriteLine (" CURRENT POSITION: {0}", lob.Position);
  988. Console.WriteLine (" CLOSE OracleLob...");
  989. lob.Close ();
  990. Console.WriteLine (" CLOSING READER...");
  991. reader.Close ();
  992. transaction.Commit ();
  993. }
  994. static void Wait(string msg)
  995. {
  996. Console.WriteLine(msg);
  997. if (msg.Equals(""))
  998. Console.WriteLine("Waiting... Press Enter to continue...");
  999. Console.ReadLine();
  1000. }
  1001. // use this function to read a byte array into a string
  1002. // for easy display of binary data, such as, a BLOB value
  1003. public static string GetHexString (byte[] bytes)
  1004. {
  1005. string bvalue = "";
  1006. StringBuilder sb2 = new StringBuilder();
  1007. for (int z = 0; z < bytes.Length; z++) {
  1008. byte byt = bytes[z];
  1009. if (byt < 0x10)
  1010. sb2.Append ("0");
  1011. sb2.Append (byt.ToString("x"));
  1012. }
  1013. if (sb2.Length > 0)
  1014. bvalue = "0x" + sb2.ToString ();
  1015. return bvalue;
  1016. }
  1017. static void StoredProcedureTest1 (OracleConnection con)
  1018. {
  1019. // test stored procedure with no parameters
  1020. OracleCommand cmd2 = con.CreateCommand ();
  1021. Console.WriteLine(" Drop table MONO_TEST_TABLE1...");
  1022. try {
  1023. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE1";
  1024. cmd2.ExecuteNonQuery ();
  1025. }
  1026. catch(OracleException) {
  1027. // ignore if table did not exist
  1028. }
  1029. Console.WriteLine(" Drop procedure SP_TEST1...");
  1030. try {
  1031. cmd2.CommandText = "DROP PROCEDURE SP_TEST1";
  1032. cmd2.ExecuteNonQuery ();
  1033. }
  1034. catch(OracleException) {
  1035. // ignore if procedure did not exist
  1036. }
  1037. Console.WriteLine(" Create table MONO_TEST_TABLE1...");
  1038. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE1 (" +
  1039. " COL1 VARCHAR2(8), "+
  1040. " COL2 VARCHAR2(32))";
  1041. cmd2.ExecuteNonQuery ();
  1042. Console.WriteLine(" Create stored procedure SP_TEST1...");
  1043. cmd2.CommandText = "CREATE PROCEDURE SP_TEST1 " +
  1044. " IS " +
  1045. " BEGIN " +
  1046. " INSERT INTO MONO_TEST_TABLE1 (COL1,COL2) VALUES ('aaa','bbbb');" +
  1047. " COMMIT;" +
  1048. " END;";
  1049. cmd2.ExecuteNonQuery ();
  1050. Console.WriteLine("COMMIT...");
  1051. cmd2.CommandText = "COMMIT";
  1052. cmd2.ExecuteNonQuery ();
  1053. Console.WriteLine(" Call stored procedure sp_test1...");
  1054. OracleCommand cmd3 = con.CreateCommand ();
  1055. cmd3.CommandType = CommandType.StoredProcedure;
  1056. cmd3.CommandText = "sp_test1";
  1057. cmd3.ExecuteNonQuery ();
  1058. }
  1059. static void StoredProcedureTest2 (OracleConnection con)
  1060. {
  1061. // test stored procedure with 2 parameters
  1062. Console.WriteLine(" Drop table MONO_TEST_TABLE2...");
  1063. OracleCommand cmd2 = con.CreateCommand ();
  1064. try {
  1065. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE2";
  1066. cmd2.ExecuteNonQuery ();
  1067. }
  1068. catch(OracleException) {
  1069. // ignore if table already exists
  1070. }
  1071. Console.WriteLine(" Drop procedure SP_TEST2...");
  1072. try {
  1073. cmd2.CommandText = "DROP PROCEDURE SP_TEST2";
  1074. cmd2.ExecuteNonQuery ();
  1075. }
  1076. catch(OracleException) {
  1077. // ignore if procedure does not exists
  1078. }
  1079. Console.WriteLine(" Create table MONO_TEST_TABLE2...");
  1080. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE2 (" +
  1081. " COL1 VARCHAR2(8), "+
  1082. " COL2 VARCHAR2(32))";
  1083. cmd2.ExecuteNonQuery ();
  1084. Console.WriteLine(" Create stored procedure SP_TEST2...");
  1085. cmd2.CommandText = "CREATE PROCEDURE SP_TEST2(parm1 VARCHAR2,parm2 VARCHAR2) " +
  1086. " IS " +
  1087. " BEGIN " +
  1088. " INSERT INTO MONO_TEST_TABLE2 (COL1,COL2) VALUES (parm1,parm2);" +
  1089. " COMMIT;" +
  1090. " END;";
  1091. cmd2.ExecuteNonQuery ();
  1092. Console.WriteLine(" COMMIT...");
  1093. cmd2.CommandText = "COMMIT";
  1094. cmd2.ExecuteNonQuery ();
  1095. Console.WriteLine(" Call stored procedure SP_TEST2 with two parameters...");
  1096. OracleCommand cmd3 = con.CreateCommand ();
  1097. cmd3.CommandType = CommandType.StoredProcedure;
  1098. cmd3.CommandText = "sp_test2";
  1099. OracleParameter myParameter1 = new OracleParameter("parm1", OracleType.VarChar);
  1100. myParameter1.Value = "yyy13";
  1101. myParameter1.Size = 8;
  1102. myParameter1.Direction = ParameterDirection.Input;
  1103. OracleParameter myParameter2 = new OracleParameter("parm2", OracleType.VarChar);
  1104. myParameter2.Value = "iii13";
  1105. myParameter2.Size = 32;
  1106. myParameter2.Direction = ParameterDirection.Input;
  1107. cmd3.Parameters.Add (myParameter1);
  1108. cmd3.Parameters.Add (myParameter2);
  1109. cmd3.ExecuteNonQuery ();
  1110. }
  1111. static void OutParmTest1(OracleConnection con)
  1112. {
  1113. // test stored fuctions with 4 parameters
  1114. // 1. input varchar2
  1115. // 2. output varchar2
  1116. // 3. input output varchar2
  1117. // 4. return varchar2
  1118. Console.WriteLine(" Create stored function SP_OUTPUTPARMTEST1 for testing VARCHAR2 Input, Output, InputOutput, Return parameters...");
  1119. OracleCommand cmd2 = con.CreateCommand();
  1120. cmd2.CommandText =
  1121. "CREATE OR REPLACE FUNCTION SF_TESTOUTPARM1(parm1 IN VARCHAR2, parm2 OUT VARCHAR2, parm3 IN OUT VARCHAR2) RETURN VARCHAR2 " +
  1122. "IS " +
  1123. " returnValue VARCHAR2(32) := 'Anywhere';" +
  1124. "BEGIN " +
  1125. " IF parm1 IS NULL THEN " +
  1126. " parm2 := 'parm1 is null'; " +
  1127. " ELSE " +
  1128. " parm2 := 'One' || parm1 || 'Three'; " +
  1129. " END IF; " +
  1130. " IF parm3 IS NOT NULL THEN " +
  1131. " parm3 := parm2 || parm3 || 'Five'; " +
  1132. " ELSE " +
  1133. " parm3 := 'parm3 in was NULL'; " +
  1134. " END IF; " +
  1135. " IF parm1 IS NOT NULL THEN " +
  1136. " IF parm1 = '999' THEN " +
  1137. " parm2 := NULL; " +
  1138. " parm3 := NULL; " +
  1139. " returnValue := NULL; " +
  1140. " END IF; " +
  1141. " END IF; " +
  1142. " RETURN returnValue; " +
  1143. "END;";
  1144. cmd2.ExecuteNonQuery();
  1145. Console.WriteLine(" COMMIT...");
  1146. cmd2.CommandText = "COMMIT";
  1147. cmd2.ExecuteNonQuery();
  1148. Console.WriteLine(" Call stored function SF_TESTOUTPARM1 with 4 parameters...");
  1149. OracleCommand cmd3 = con.CreateCommand();
  1150. cmd3.CommandType = CommandType.Text;
  1151. cmd3.CommandText =
  1152. "BEGIN " +
  1153. " :ReturnValue := SF_TESTOUTPARM1(:p1, :p2, :p3); " +
  1154. "END;";
  1155. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.VarChar);
  1156. myParameter1.Value = "Two";
  1157. myParameter1.Size = 32;
  1158. myParameter1.Direction = ParameterDirection.Input;
  1159. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.VarChar);
  1160. myParameter2.Size = 32;
  1161. myParameter2.Direction = ParameterDirection.Output;
  1162. OracleParameter myParameter3 = new OracleParameter("p3", OracleType.VarChar);
  1163. myParameter3.Value = "Four";
  1164. myParameter3.Size = 32;
  1165. myParameter3.Direction = ParameterDirection.InputOutput;
  1166. OracleParameter myParameter4 = new OracleParameter("ReturnValue", OracleType.VarChar);
  1167. myParameter4.Size = 32;
  1168. myParameter4.Direction = ParameterDirection.ReturnValue;
  1169. cmd3.Parameters.Add(myParameter1);
  1170. cmd3.Parameters.Add(myParameter2);
  1171. cmd3.Parameters.Add(myParameter3);
  1172. cmd3.Parameters.Add(myParameter4);
  1173. cmd3.ExecuteNonQuery();
  1174. string outValue = (string)myParameter2.Value;
  1175. string inOutValue = (string)myParameter3.Value;
  1176. string returnValue = (string)myParameter4.Value;
  1177. Console.WriteLine(" 1Out Value should be: OneTwoThree");
  1178. Console.WriteLine(" 1Out Value: " + outValue);
  1179. Console.WriteLine(" 1InOut Value should be: OneTwoThreeFourFive");
  1180. Console.WriteLine(" 1InOut Value: " + inOutValue);
  1181. Console.WriteLine(" 1Return Value should be: Anywhere");
  1182. Console.WriteLine(" 1Return Value: " + returnValue);
  1183. Console.WriteLine();
  1184. myParameter1.Value = DBNull.Value;
  1185. myParameter3.Value = "Hello";
  1186. cmd3.ExecuteNonQuery();
  1187. outValue = (string)myParameter2.Value;
  1188. inOutValue = (string)myParameter3.Value;
  1189. returnValue = (string)myParameter4.Value;
  1190. Console.WriteLine(" 2Out Value should be: parm1 is null");
  1191. Console.WriteLine(" 2Out Value: " + outValue);
  1192. Console.WriteLine(" 2InOut Value should be: parm1 is nullHelloFive");
  1193. Console.WriteLine(" 2InOut Value: " + inOutValue);
  1194. Console.WriteLine(" 2Return Value should be: Anywhere");
  1195. Console.WriteLine(" 2Return Value: " + returnValue);
  1196. Console.WriteLine();
  1197. myParameter1.Value = "999";
  1198. myParameter3.Value = "Bye";
  1199. cmd3.ExecuteNonQuery();
  1200. if (myParameter2.Value == DBNull.Value)
  1201. outValue = "Value is DBNull.Value";
  1202. else
  1203. outValue = (string)myParameter2.Value;
  1204. if( myParameter3.Value == DBNull.Value)
  1205. inOutValue = "Value is DBNull.Value";
  1206. else
  1207. inOutValue = (string)myParameter3.Value;
  1208. if (myParameter4.Value == DBNull.Value)
  1209. returnValue = "Value is DBNull.Value";
  1210. else
  1211. returnValue = (string)myParameter4.Value;
  1212. Console.WriteLine(" 3Out Value should be: Value is DBNull.Value");
  1213. Console.WriteLine(" 3Out Value: " + outValue);
  1214. Console.WriteLine(" 3InOut Value should be: Value is DBNull.Value");
  1215. Console.WriteLine(" 3InOut Value: " + inOutValue);
  1216. Console.WriteLine(" 3Return Value should be: Value is DBNull.Value");
  1217. Console.WriteLine(" 3Return Value: " + returnValue);
  1218. Console.WriteLine();
  1219. myParameter1.Value = "***";
  1220. myParameter3.Value = DBNull.Value;
  1221. cmd3.ExecuteNonQuery();
  1222. outValue = (string)myParameter2.Value;
  1223. inOutValue = (string)myParameter3.Value;
  1224. returnValue = (string)myParameter4.Value;
  1225. Console.WriteLine(" 4Out Value should be: One***Three");
  1226. Console.WriteLine(" 4Out Value: " + outValue);
  1227. Console.WriteLine(" 4InOut Value should be: parm3 in was NULL");
  1228. Console.WriteLine(" 4InOut Value: " + inOutValue);
  1229. Console.WriteLine(" 4Return Value should be: Anywhere");
  1230. Console.WriteLine(" 4Return Value: " + returnValue);
  1231. Console.WriteLine();
  1232. }
  1233. static void OutParmTest2 (OracleConnection con)
  1234. {
  1235. // test stored function with 4 parameters
  1236. // 1. input number(18,2)
  1237. // 2. output number(18,2)
  1238. // 3. input output number (18,2)
  1239. // 4. return number (18,2)
  1240. Console.WriteLine(" Create stored function SF_TESTOUTPARM2 to test NUMBER parameters...");
  1241. // stored procedure addes two numbers
  1242. OracleCommand cmd2 = con.CreateCommand();
  1243. cmd2.CommandText =
  1244. "CREATE OR REPLACE FUNCTION SF_TESTOUTPARM2(parm1 IN NUMBER, parm2 OUT NUMBER, parm3 IN OUT NUMBER) RETURN NUMBER " +
  1245. "IS " +
  1246. " returnValue NUMBER := 123.45; " +
  1247. "BEGIN " +
  1248. " IF parm1 IS NULL THEN " +
  1249. " parm2 := 18; " +
  1250. " parm3 := parm3 + 8000; " +
  1251. " returnValue := 78; " +
  1252. " ELSIF parm1 = 999 THEN " +
  1253. " parm2 := NULL;" +
  1254. " parm3 := NULL;" +
  1255. " returnValue := NULL;" +
  1256. " ELSIF parm3 IS NULL THEN " +
  1257. " parm2 := 0; " +
  1258. " parm3 := 1234567890123.12345678; " +
  1259. " ELSE " +
  1260. " parm2 := parm1 + 3; " +
  1261. " parm3 := parm3 + 70; " +
  1262. " END IF;" +
  1263. " RETURN returnValue;" +
  1264. "END;";
  1265. cmd2.ExecuteNonQuery();
  1266. Console.WriteLine(" COMMIT...");
  1267. cmd2.CommandText = "COMMIT";
  1268. cmd2.ExecuteNonQuery();
  1269. Console.WriteLine(" Call stored function SP_TESTOUTPARM2 with 4 parameters...");
  1270. OracleCommand cmd3 = con.CreateCommand();
  1271. cmd3.CommandType = CommandType.Text;
  1272. cmd3.CommandText =
  1273. "BEGIN " +
  1274. " :returnValue := SF_TESTOUTPARM2(:p1, :p2, :p3);" +
  1275. "END;";
  1276. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.Number);
  1277. myParameter1.Value = 2.2;
  1278. myParameter1.Direction = ParameterDirection.Input;
  1279. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.Number);
  1280. myParameter2.Direction = ParameterDirection.Output;
  1281. OracleParameter myParameter3 = new OracleParameter("p3", OracleType.Number);
  1282. myParameter3.Value = 33.4;
  1283. myParameter3.Direction = ParameterDirection.InputOutput;
  1284. OracleParameter myParameter4 = new OracleParameter("returnValue", OracleType.Number);
  1285. myParameter4.Direction = ParameterDirection.ReturnValue;
  1286. cmd3.Parameters.Add(myParameter1);
  1287. cmd3.Parameters.Add(myParameter2);
  1288. cmd3.Parameters.Add(myParameter3);
  1289. cmd3.Parameters.Add(myParameter4);
  1290. cmd3.ExecuteNonQuery();
  1291. decimal outValue = (decimal)myParameter2.Value;
  1292. decimal inOutValue = (decimal)myParameter3.Value;
  1293. decimal returnValue = (decimal)myParameter4.Value;
  1294. Console.WriteLine(" 1Out Value should be: 5.20");
  1295. Console.WriteLine(" 1Out Value: {0}", outValue);
  1296. Console.WriteLine(" 1InOut Value should be: 103.40");
  1297. Console.WriteLine(" 1InOut Value: {0}", inOutValue);
  1298. Console.WriteLine(" 1Return Value should be: 123.45");
  1299. Console.WriteLine(" 1Return Value: {0}", returnValue);
  1300. Console.WriteLine();
  1301. myParameter1.Value = DBNull.Value;
  1302. myParameter3.Value = 23;
  1303. cmd3.ExecuteNonQuery();
  1304. outValue = (decimal)myParameter2.Value;
  1305. inOutValue = (decimal)myParameter3.Value;
  1306. returnValue = (decimal)myParameter4.Value;
  1307. Console.WriteLine(" 2Out Value should be: 18");
  1308. Console.WriteLine(" 2Out Value: {0}", outValue);
  1309. Console.WriteLine(" 2InOut Value should be: 8023");
  1310. Console.WriteLine(" 2InOut Value: {0}", inOutValue);
  1311. Console.WriteLine(" 2Return Value should be: 78");
  1312. Console.WriteLine(" 2Return Value: {0}", returnValue);
  1313. Console.WriteLine();
  1314. string soutValue = "";
  1315. string sinOutValue = "";
  1316. string sreturnValue = "";
  1317. myParameter1.Value = 999;
  1318. myParameter3.Value = 66;
  1319. cmd3.ExecuteNonQuery();
  1320. if (myParameter2.Value == DBNull.Value)
  1321. soutValue = "DBNull.Value";
  1322. else
  1323. soutValue = myParameter2.Value.ToString();
  1324. if (myParameter3.Value == DBNull.Value)
  1325. sinOutValue = "DBNull.Value";
  1326. else
  1327. sinOutValue = myParameter3.Value.ToString();
  1328. if (myParameter4.Value == DBNull.Value)
  1329. sreturnValue = "DBNull.Value";
  1330. else
  1331. sreturnValue = myParameter4.Value.ToString();
  1332. Console.WriteLine(" 3Out Value should be: DBNull.Value");
  1333. Console.WriteLine(" 3Out Value: {0}", soutValue);
  1334. Console.WriteLine(" 3InOut Value should be: DBNull.Value");
  1335. Console.WriteLine(" 3InOut Value: {0}", sinOutValue);
  1336. Console.WriteLine(" 3Return Value should be: DBNull.Value");
  1337. Console.WriteLine(" 3Return Value: {0}", sreturnValue);
  1338. Console.WriteLine();
  1339. myParameter1.Value = 111;
  1340. myParameter3.Value = DBNull.Value;
  1341. cmd3.ExecuteNonQuery();
  1342. outValue = (decimal)myParameter2.Value;
  1343. inOutValue = (decimal)myParameter3.Value;
  1344. returnValue = (decimal)myParameter4.Value;
  1345. Console.WriteLine(" 4Out Value should be: 0 (as in digit zero)");
  1346. Console.WriteLine(" 4Out Value: {0}", outValue);
  1347. Console.WriteLine(" 4InOut Value should be: 1234567890123.12345678");
  1348. Console.WriteLine(" 4InOut Value: {0}", inOutValue);
  1349. Console.WriteLine(" 4Return Value should be: 123.45");
  1350. Console.WriteLine(" 4Return Value: {0}", returnValue);
  1351. Console.WriteLine();
  1352. }
  1353. static void OutParmTest3 (OracleConnection con)
  1354. {
  1355. // test stored function with 4 parameters
  1356. // 1. input date
  1357. // 2. output date
  1358. // 3. input output date
  1359. // 4. return dae
  1360. // a DATE type in Oracle has Date and Time
  1361. Console.WriteLine(" Create stored function SF_TESTOUTPARM3 to test Date parameters...");
  1362. OracleCommand cmd2 = con.CreateCommand();
  1363. cmd2.CommandText =
  1364. "CREATE OR REPLACE FUNCTION SF_TESTOUTPARM3(parm1 IN DATE, parm2 OUT DATE, parm3 IN OUT DATE) RETURN DATE " +
  1365. "IS " +
  1366. " returnValue DATE := TO_DATE('2001-07-01 15:32:52', 'YYYY-MM-DD HH24:MI:SS');" +
  1367. "BEGIN " +
  1368. " IF parm1 IS NULL THEN " +
  1369. " parm2 := TO_DATE('1900-12-31', 'YYYY-MM-DD'); " +
  1370. " parm3 := TO_DATE('1900-12-31', 'YYYY-MM-DD'); " +
  1371. " ELSIF parm1 = TO_DATE('1979-11-25','YYYY-MM-DD') THEN " +
  1372. " parm2 := NULL;" +
  1373. " parm3 := NULL;" +
  1374. " returnValue := NULL;"+
  1375. " ELSIF parm3 IS NULL THEN " +
  1376. " parm2 := TO_DATE('2008-08-08', 'YYYY-MM-DD');" +
  1377. " parm3 := TO_DATE('2000-01-01', 'YYYY-MM-DD');" +
  1378. " ELSE " +
  1379. " -- add 3 days to date\n " +
  1380. " parm2 := parm1 + 3; " +
  1381. " parm3 := parm3 + 5; " +
  1382. " END IF; " +
  1383. " RETURN returnValue;" +
  1384. "END;";
  1385. cmd2.ExecuteNonQuery();
  1386. Console.WriteLine(" COMMIT...");
  1387. cmd2.CommandText = "COMMIT";
  1388. cmd2.ExecuteNonQuery();
  1389. Console.WriteLine(" Call stored function SF_TESTOUTPARM3 with 4 parameters...");
  1390. OracleCommand cmd3 = con.CreateCommand();
  1391. cmd3.CommandType = CommandType.Text;
  1392. cmd3.CommandText =
  1393. "BEGIN " +
  1394. " :returnValue := SF_TESTOUTPARM3(:p1, :p2, :p3);" +
  1395. "END;";
  1396. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.DateTime);
  1397. myParameter1.Value = new DateTime(2004, 12, 15);
  1398. myParameter1.Direction = ParameterDirection.Input;
  1399. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.DateTime);
  1400. myParameter2.Direction = ParameterDirection.Output;
  1401. OracleParameter myParameter3 = new OracleParameter("p3", OracleType.DateTime);
  1402. myParameter3.Value = new DateTime(2008, 10, 14, 20, 21, 22);
  1403. myParameter3.Direction = ParameterDirection.InputOutput;
  1404. OracleParameter myParameter4 = new OracleParameter("returnValue", OracleType.DateTime);
  1405. myParameter4.Direction = ParameterDirection.ReturnValue;
  1406. cmd3.Parameters.Add(myParameter1);
  1407. cmd3.Parameters.Add(myParameter2);
  1408. cmd3.Parameters.Add(myParameter3);
  1409. cmd3.Parameters.Add(myParameter4);
  1410. cmd3.ExecuteNonQuery();
  1411. DateTime outValue = (DateTime)myParameter2.Value;
  1412. DateTime inOutValue = (DateTime)myParameter3.Value;
  1413. DateTime returnValue = (DateTime)myParameter4.Value;
  1414. Console.WriteLine(" 1Out Value should be: 2004-12-18 00:00:00");
  1415. Console.WriteLine(" 1Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1416. Console.WriteLine(" 1InOut Value should be: 2008-10-19 20:21:22");
  1417. Console.WriteLine(" 1InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1418. Console.WriteLine(" 1Return Value should be: 2001-07-01 15:32:52");
  1419. Console.WriteLine(" 1Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1420. Console.WriteLine();
  1421. myParameter1.Value = DBNull.Value;
  1422. myParameter3.Value = new DateTime(1980, 11, 22);
  1423. cmd3.ExecuteNonQuery();
  1424. outValue = (DateTime)myParameter2.Value;
  1425. inOutValue = (DateTime)myParameter3.Value;
  1426. returnValue = (DateTime)myParameter4.Value;
  1427. Console.WriteLine(" 2Out Value should be: 1900-12-31 00:00:00");
  1428. Console.WriteLine(" 2Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1429. Console.WriteLine(" 2InOut Value should be: 1900-12-31 00:00:00");
  1430. Console.WriteLine(" 2InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1431. Console.WriteLine(" 2Return Value should be: 2001-07-01 15:32:52");
  1432. Console.WriteLine(" 2Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1433. Console.WriteLine();
  1434. myParameter1.Value = new DateTime(1979, 11, 25);
  1435. myParameter3.Value = new DateTime(1981, 12, 14);
  1436. cmd3.ExecuteNonQuery();
  1437. string soutValue = "";
  1438. string sinOutValue = "";
  1439. string sreturnValue = "";
  1440. if (myParameter2.Value == DBNull.Value)
  1441. soutValue = "DBNull.Value";
  1442. else {
  1443. outValue = (DateTime)myParameter2.Value;
  1444. soutValue = outValue.ToString("yyyy-MM-dd HH:mm:ss");
  1445. }
  1446. if (myParameter3.Value == DBNull.Value)
  1447. sinOutValue = "DBNull.Value";
  1448. else {
  1449. inOutValue = (DateTime)myParameter3.Value;
  1450. sinOutValue = inOutValue.ToString("yyyy-MM-dd HH:mm:ss");
  1451. }
  1452. if (myParameter4.Value == DBNull.Value)
  1453. sreturnValue = "DBNull.Value";
  1454. else {
  1455. returnValue = (DateTime)myParameter4.Value;
  1456. sreturnValue = returnValue.ToString("yyyy-MM-dd HH:mm:ss");
  1457. }
  1458. Console.WriteLine(" 3Out Value should be: DBNull.Value");
  1459. Console.WriteLine(" 3Out Value: {0}", soutValue);
  1460. Console.WriteLine(" 3InOut Value should be: DBNull.Value");
  1461. Console.WriteLine(" 3InOut Value: {0}", sinOutValue);
  1462. Console.WriteLine(" 3Return Value should be: DBNull.Value");
  1463. Console.WriteLine(" 3Return Value: {0}", sreturnValue);
  1464. Console.WriteLine();
  1465. myParameter1.Value = new DateTime(1976, 7, 4);
  1466. myParameter3.Value = DBNull.Value;
  1467. cmd3.ExecuteNonQuery();
  1468. outValue = (DateTime)myParameter2.Value;
  1469. inOutValue = (DateTime)myParameter3.Value;
  1470. returnValue = (DateTime)myParameter4.Value;
  1471. Console.WriteLine(" 4Out Value should be: 2008-08-08 00:00:00");
  1472. Console.WriteLine(" 4Out Value: {0}", outValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1473. Console.WriteLine(" 4InOut Value should be: 2000-01-01 00:00:00");
  1474. Console.WriteLine(" 4InOut Value: {0}", inOutValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1475. Console.WriteLine(" 4Return Value should be: 2001-07-01 15:32:52");
  1476. Console.WriteLine(" 4Return Value: {0}", returnValue.ToString("yyyy-MM-dd HH:mm:ss"));
  1477. Console.WriteLine();
  1478. }
  1479. static void OutParmTest4(OracleConnection con)
  1480. {
  1481. // test stored fuctions with 4 parameters
  1482. // 1. input long
  1483. // 2. output long
  1484. // 3. input output long
  1485. // 4. return long
  1486. Console.WriteLine(" Create stored function SP_OUTPUTPARMTEST4 for testing LONG VARCHAR Input, Output, InputOutput, Return parameters...");
  1487. OracleCommand cmd2 = con.CreateCommand();
  1488. cmd2.CommandText =
  1489. "CREATE OR REPLACE FUNCTION SP_OUTPUTPARMTEST4(parm1 IN LONG, parm2 OUT LONG, parm3 IN OUT LONG) RETURN LONG " +
  1490. "IS " +
  1491. " returnValue LONG := 'A very, very, very long value in a far away memory space.'; " +
  1492. "BEGIN " +
  1493. " IF parm1 IS NULL THEN " +
  1494. " parm2 := 'parm1 is null'; " +
  1495. " returnValue := 'Another one bytes the dust.'; " +
  1496. " ELSE " +
  1497. " parm2 := 'One' || parm1 || 'Three'; " +
  1498. " END IF; " +
  1499. " IF parm3 IS NOT NULL THEN " +
  1500. " parm3 := parm2 || parm3 || 'Five'; " +
  1501. " ELSE " +
  1502. " parm3 := 'parm3 in was NULL'; " +
  1503. " END IF; " +
  1504. " IF parm1 IS NOT NULL THEN " +
  1505. " IF parm1 = '999' THEN " +
  1506. " parm2 := NULL; " +
  1507. " parm3 := NULL; " +
  1508. " returnValue := NULL; " +
  1509. " END IF; " +
  1510. " END IF; " +
  1511. " RETURN returnValue; " +
  1512. "END;";
  1513. cmd2.ExecuteNonQuery();
  1514. Console.WriteLine(" COMMIT...");
  1515. cmd2.CommandText = "COMMIT";
  1516. cmd2.ExecuteNonQuery();
  1517. Console.WriteLine(" Call stored procedure SP_OUTPUTPARMTEST4 with 4 parameters...");
  1518. OracleCommand cmd3 = con.CreateCommand();
  1519. cmd3.CommandType = CommandType.Text;
  1520. cmd3.CommandText =
  1521. "BEGIN " +
  1522. " :ReturnValue := SP_OUTPUTPARMTEST4(:p1, :p2, :p3); " +
  1523. "END;";
  1524. OracleParameter myParameter1 = new OracleParameter("p1", OracleType.LongVarChar);
  1525. myParameter1.Size = 1000;
  1526. myParameter1.Direction = ParameterDirection.Input;
  1527. myParameter1.Value = "Two";
  1528. OracleParameter myParameter2 = new OracleParameter("p2", OracleType.LongVarChar);
  1529. myParameter2.Size = 1000;
  1530. myParameter2.Direction = ParameterDirection.Output;
  1531. OracleParameter myParameter3 = new OracleParameter("p3", OracleType.LongVarChar);
  1532. myParameter3.Value = "Four";
  1533. myParameter3.Size = 1000;
  1534. myParameter3.Direction = ParameterDirection.InputOutput;
  1535. OracleParameter myParameter4 = new OracleParameter("ReturnValue", OracleType.LongVarChar);
  1536. myParameter4.Size = 1000;
  1537. myParameter4.Direction = ParameterDirection.ReturnValue;
  1538. cmd3.Parameters.Add(myParameter1);
  1539. cmd3.Parameters.Add(myParameter2);
  1540. cmd3.Parameters.Add(myParameter3);
  1541. cmd3.Parameters.Add(myParameter4);
  1542. cmd3.ExecuteNonQuery();
  1543. string outValue = (string)myParameter2.Value;
  1544. string inOutValue = (string)myParameter3.Value;
  1545. string returnValue = (string)myParameter4.Value;
  1546. Console.WriteLine(" 1Out Value should be: OneTwoThree");
  1547. Console.WriteLine(" 1Out Value: " + outValue);
  1548. Console.WriteLine(" 1InOut Value should be: OneTwoThreeFourFive");
  1549. Console.WriteLine(" 1InOut Value: " + inOutValue);
  1550. Console.WriteLine(" 1Return Value should be: A very, very, very long value in a far away memory space.");
  1551. Console.WriteLine(" 1Return Value: " + returnValue);
  1552. Console.WriteLine();
  1553. myParameter1.Value = DBNull.Value;
  1554. myParameter3.Value = "Hello";
  1555. cmd3.ExecuteNonQuery();
  1556. outValue = (string)myParameter2.Value;
  1557. inOutValue = (string)myParameter3.Value;
  1558. returnValue = (string)myParameter4.Value;
  1559. Console.WriteLine(" 2Out Value should be: parm1 is null");
  1560. Console.WriteLine(" 2Out Value: " + outValue);
  1561. Console.WriteLine(" 2InOut Value should be: parm1 is nullHelloFive");
  1562. Console.WriteLine(" 2InOut Value: " + inOutValue);
  1563. Console.WriteLine(" 2Return Value should be: Another one bytes the dust.");
  1564. Console.WriteLine(" 2Return Value: " + returnValue);
  1565. Console.WriteLine();
  1566. myParameter1.Value = "999";
  1567. myParameter3.Value = "Bye";
  1568. cmd3.ExecuteNonQuery();
  1569. if (myParameter2.Value == DBNull.Value)
  1570. outValue = "Value is DBNull.Value";
  1571. else
  1572. outValue = (string)myParameter2.Value;
  1573. if (myParameter3.Value == DBNull.Value)
  1574. inOutValue = "Value is DBNullValue";
  1575. else
  1576. inOutValue = (string)myParameter3.Value;
  1577. if (myParameter4.Value == DBNull.Value)
  1578. returnValue = "Value is DBNull.Value";
  1579. else
  1580. returnValue = (string)myParameter4.Value;
  1581. Console.WriteLine(" 3Out Value should be: Value is DBNull.Value");
  1582. Console.WriteLine(" 3Out Value: " + outValue);
  1583. Console.WriteLine(" 3InOut Value should be: Value is DBNull.Value");
  1584. Console.WriteLine(" 3InOut Value: " + inOutValue);
  1585. Console.WriteLine(" 3Return Value should be: Value is DBNull.Value");
  1586. Console.WriteLine(" 3Return Value: " + returnValue);
  1587. Console.WriteLine();
  1588. myParameter1.Value = "***";
  1589. myParameter3.Value = DBNull.Value;
  1590. cmd3.ExecuteNonQuery();
  1591. outValue = (string)myParameter2.Value;
  1592. inOutValue = (string)myParameter3.Value;
  1593. returnValue = (string)myParameter4.Value;
  1594. Console.WriteLine(" 4Out Value should be: One***Three");
  1595. Console.WriteLine(" 4Out Value: " + outValue);
  1596. Console.WriteLine(" 4InOut Value should be: parm3 in was NULL");
  1597. Console.WriteLine(" 4InOut Value: " + inOutValue);
  1598. Console.WriteLine(" 4Return Value should be: A very, very, very long value in a far away memory space.");
  1599. Console.WriteLine(" 4Return Value: " + returnValue);
  1600. Console.WriteLine();
  1601. }
  1602. static void ShowConnectionProperties (OracleConnection con)
  1603. {
  1604. try {
  1605. Console.WriteLine ("ServerVersion: " + con.ServerVersion);
  1606. } catch (System.InvalidOperationException ioe) {
  1607. Console.WriteLine ("InvalidOperationException caught.");
  1608. Console.WriteLine ("Message: " + ioe.Message);
  1609. }
  1610. Console.WriteLine ("DataSource: " + con.DataSource);
  1611. }
  1612. static void NullAggregateTest (OracleConnection con)
  1613. {
  1614. Console.WriteLine(" Drop table MONO_TEST_TABLE3...");
  1615. OracleCommand cmd2 = con.CreateCommand ();
  1616. try {
  1617. cmd2.CommandText = "DROP TABLE MONO_TEST_TABLE3";
  1618. cmd2.ExecuteNonQuery ();
  1619. }
  1620. catch(OracleException) {
  1621. // ignore if table already exists
  1622. }
  1623. Console.WriteLine(" Create table MONO_TEST_TABLE3...");
  1624. cmd2.CommandText = "CREATE TABLE MONO_TEST_TABLE3 (" +
  1625. " COL1 VARCHAR2(8), "+
  1626. " COL2 VARCHAR2(32))";
  1627. cmd2.ExecuteNonQuery ();
  1628. Console.WriteLine(" Insert some rows into table MONO_TEST_TABLE3...");
  1629. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('1','one')";
  1630. cmd2.ExecuteNonQuery ();
  1631. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('1','uno')";
  1632. cmd2.ExecuteNonQuery ();
  1633. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3','three')";
  1634. cmd2.ExecuteNonQuery ();
  1635. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3', null)";
  1636. cmd2.ExecuteNonQuery ();
  1637. cmd2.CommandText = "INSERT INTO MONO_TEST_TABLE3 (COL1, COL2) VALUES ('3','few')";
  1638. cmd2.ExecuteNonQuery ();
  1639. Console.WriteLine(" ExecuteScalar...");
  1640. cmd2.CommandText = "SELECT COL1, COUNT(COL2) AS MAX_COL1 FROM MONO_TEST_TABLE3 GROUP BY COL1";
  1641. OracleDataReader reader = cmd2.ExecuteReader ();
  1642. Console.WriteLine (" Read...");
  1643. while (reader.Read ()) {
  1644. object obj0 = reader.GetValue (0);
  1645. Console.WriteLine("Value 0: " + obj0.ToString ());
  1646. object obj1 = reader.GetValue (1);
  1647. Console.WriteLine("Value 1: " + obj1.ToString ());
  1648. Console.WriteLine (" Read...");
  1649. }
  1650. Console.WriteLine (" No more records.");
  1651. }
  1652. static void OnInfoMessage (object sender, OracleInfoMessageEventArgs e)
  1653. {
  1654. Console.WriteLine("InfoMessage Message: " + e.Message.ToString());
  1655. Console.WriteLine("InfoMessage Code: " + e.Code.ToString());
  1656. Console.WriteLine("InfoMessage Source: " + e.Source.ToString());
  1657. }
  1658. static void OnStateChange (object sender, StateChangeEventArgs e)
  1659. {
  1660. Console.WriteLine("StateChange CurrentSate:" + e.CurrentState.ToString ());
  1661. Console.WriteLine("StateChange OriginalState:" + e.OriginalState.ToString ());
  1662. }
  1663. static void RefCursorTests(OracleConnection con)
  1664. {
  1665. SetupRefCursorTests(con); // for ref cursor tests 1 thru 3
  1666. RefCursorTest1(con); // using BEGIN/END
  1667. RefCursorTest2(con); // using call
  1668. RefCursorTest3(con); // using CommandType.StoredProcedure
  1669. RefCursorTest4(con);
  1670. }
  1671. static void SetupRefCursorTests(OracleConnection con)
  1672. {
  1673. Console.WriteLine("Setup Oracle package curspkg_join...");
  1674. OracleCommand cmd = con.CreateCommand();
  1675. Console.Error.WriteLine(" create or replace package curspkg_join...");
  1676. cmd.CommandText =
  1677. "CREATE OR REPLACE PACKAGE curspkg_join AS\n" +
  1678. "TYPE t_cursor IS REF CURSOR;\n" +
  1679. "Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor);\n" +
  1680. "END curspkg_join;";
  1681. cmd.ExecuteNonQuery();
  1682. Console.Error.WriteLine(" create or replace package body curspkg_join...");
  1683. cmd.CommandText =
  1684. "CREATE OR REPLACE PACKAGE BODY curspkg_join AS\n" +
  1685. " Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)\n" +
  1686. " IS\n" +
  1687. " v_cursor t_cursor;\n" +
  1688. " BEGIN\n" +
  1689. " IF n_EMPNO <> 0 THEN\n" +
  1690. " OPEN v_cursor FOR\n" +
  1691. " SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME\n" +
  1692. " FROM SCOTT.EMP, SCOTT.DEPT\n" +
  1693. " WHERE EMP.DEPTNO = DEPT.DEPTNO\n" +
  1694. " AND EMP.EMPNO = n_EMPNO;\n" +
  1695. "\n" +
  1696. " ELSE\n" +
  1697. " OPEN v_cursor FOR\n" +
  1698. " SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME\n" +
  1699. " FROM SCOTT.EMP, SCOTT.DEPT\n" +
  1700. " WHERE EMP.DEPTNO = DEPT.DEPTNO;\n" +
  1701. "\n" +
  1702. " END IF;\n" +
  1703. " io_cursor := v_cursor;\n" +
  1704. " END open_join_cursor1;\n" +
  1705. "END curspkg_join;";
  1706. cmd.ExecuteNonQuery();
  1707. cmd.CommandText = "commit";
  1708. cmd.ExecuteNonQuery();
  1709. }
  1710. public static void RefCursorTest4(OracleConnection connection)
  1711. {
  1712. Console.WriteLine("Setup test package and data for RefCursorTest4...");
  1713. OracleCommand cmddrop = connection.CreateCommand();
  1714. cmddrop.CommandText = "DROP TABLE TESTTABLE";
  1715. try {
  1716. cmddrop.ExecuteNonQuery();
  1717. }
  1718. catch(OracleException e) {
  1719. Console.WriteLine("Ignore this error: " + e.Message);
  1720. }
  1721. cmddrop.Dispose();
  1722. cmddrop = null;
  1723. OracleCommand cmd = connection.CreateCommand();
  1724. // create table TESTTABLE
  1725. cmd.CommandText =
  1726. "create table TESTTABLE (\n" +
  1727. " col1 numeric(18,0),\n" +
  1728. " col2 char(32),\n" +
  1729. " col3 date)";
  1730. cmd.ExecuteNonQuery();
  1731. // insert some rows into TESTTABLE
  1732. cmd.CommandText =
  1733. "insert into TESTTABLE\n" +
  1734. "(col1, col2, col3)\n" +
  1735. "values(45, 'Mono', sysdate)";
  1736. cmd.ExecuteNonQuery();
  1737. cmd.CommandText =
  1738. "insert into TESTTABLE\n" +
  1739. "(col1, col2, col3)\n" +
  1740. "values(136, 'Fun', sysdate)";
  1741. cmd.ExecuteNonQuery();
  1742. cmd.CommandText =
  1743. "insert into TESTTABLE\n" +
  1744. "(col1, col2, col3)\n" +
  1745. "values(526, 'System.Data.OracleClient', sysdate)";
  1746. cmd.ExecuteNonQuery();
  1747. cmd.CommandText = "commit";
  1748. cmd.ExecuteNonQuery();
  1749. // create Oracle package TestTablePkg
  1750. cmd.CommandText =
  1751. "CREATE OR REPLACE PACKAGE TestTablePkg\n" +
  1752. "AS\n" +
  1753. " TYPE T_CURSOR IS REF CURSOR;\n" +
  1754. "\n" +
  1755. " PROCEDURE GetData(tableCursor OUT T_CURSOR);\n" +
  1756. "END TestTablePkg;";
  1757. cmd.ExecuteNonQuery();
  1758. // create Oracle package body for package TestTablePkg
  1759. cmd.CommandText =
  1760. "CREATE OR REPLACE PACKAGE BODY TestTablePkg AS\n" +
  1761. " PROCEDURE GetData(tableCursor OUT T_CURSOR)\n" +
  1762. " IS\n" +
  1763. " BEGIN\n" +
  1764. " OPEN tableCursor FOR\n" +
  1765. " SELECT *\n" +
  1766. " FROM TestTable;\n" +
  1767. " END GetData;\n" +
  1768. "END TestTablePkg;";
  1769. cmd.ExecuteNonQuery();
  1770. cmd.Dispose();
  1771. cmd = null;
  1772. Console.WriteLine("Set up command and parameters to call stored proc...");
  1773. OracleCommand command = new OracleCommand("TestTablePkg.GetData", connection);
  1774. command.CommandType = CommandType.StoredProcedure;
  1775. OracleParameter parameter = new OracleParameter("tableCursor", OracleType.Cursor);
  1776. parameter.Direction = ParameterDirection.Output;
  1777. command.Parameters.Add(parameter);
  1778. Console.WriteLine("Execute...");
  1779. command.ExecuteNonQuery();
  1780. Console.WriteLine("Get OracleDataReader for cursor output parameter...");
  1781. OracleDataReader reader = (OracleDataReader) parameter.Value;
  1782. Console.WriteLine("Read data...");
  1783. int r = 0;
  1784. while (reader.Read()) {
  1785. Console.WriteLine("Row {0}", r);
  1786. for (int f = 0; f < reader.FieldCount; f ++) {
  1787. object val = reader.GetValue(f);
  1788. Console.WriteLine(" Field {0} Value: {1}", f, val.ToString());
  1789. }
  1790. r ++;
  1791. }
  1792. Console.WriteLine("Rows retrieved: {0}", r);
  1793. Console.WriteLine("Clean up...");
  1794. reader.Close();
  1795. reader = null;
  1796. command.Dispose();
  1797. command = null;
  1798. }
  1799. static void RefCursorTest1(OracleConnection con)
  1800. {
  1801. Console.WriteLine("Ref Cursor Test 1 - using BEGIN/END for proc - Begin...");
  1802. Console.WriteLine("Create command...");
  1803. OracleCommand cmd = new OracleCommand();
  1804. cmd.Connection = con;
  1805. cmd.CommandText =
  1806. "BEGIN\n" +
  1807. " curspkg_join.open_join_cursor1(:n_Empno,:io_cursor);\n" +
  1808. "END;";
  1809. // PL/SQL definition of stored procedure in package curspkg_join
  1810. // open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)
  1811. Console.WriteLine("Create parameters...");
  1812. OracleParameter parm1 = new OracleParameter("n_Empno", OracleType.Number);
  1813. parm1.Direction = ParameterDirection.Input;
  1814. parm1.Value = 7902;
  1815. OracleParameter parm2 = new OracleParameter("io_cursor", OracleType.Cursor);
  1816. parm2.Direction = ParameterDirection.Output;
  1817. cmd.Parameters.Add(parm1);
  1818. cmd.Parameters.Add(parm2);
  1819. // positional parm
  1820. //cmd.Parameters.Add(new OracleParameter("io_cursor", OracleType.Cursor)).Direction = ParameterDirection.Output;
  1821. // named parm
  1822. //cmd.Parameters.Add("n_Empno", OracleType.Number, 4).Value = 7902;
  1823. OracleDataReader reader;
  1824. Console.WriteLine("Execute Non Query...");
  1825. cmd.ExecuteNonQuery();
  1826. Console.WriteLine("Get data reader (ref cursor) from out parameter...");
  1827. reader = (OracleDataReader) cmd.Parameters["io_cursor"].Value;
  1828. int x, count;
  1829. count = 0;
  1830. Console.WriteLine("Get data from ref cursor...");
  1831. while (reader.Read()) {
  1832. for (x = 0; x < reader.FieldCount; x++)
  1833. Console.Write(reader[x] + " ");
  1834. Console.WriteLine();
  1835. count += 1;
  1836. }
  1837. Console.WriteLine(count.ToString() + " Rows Returned.");
  1838. reader.Close();
  1839. }
  1840. static void RefCursorTest2(OracleConnection con)
  1841. {
  1842. Console.WriteLine("Ref Cursor Test 2 - using call - Begin...");
  1843. Console.WriteLine("Create command...");
  1844. OracleCommand cmd = new OracleCommand();
  1845. cmd.Connection = con;
  1846. cmd.CommandText = "call curspkg_join.open_join_cursor1(:n_Empno,:io_cursor)";
  1847. // PL/SQL definition of stored procedure in package curspkg_join
  1848. // open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)
  1849. Console.WriteLine("Create parameters...");
  1850. OracleParameter parm1 = new OracleParameter("n_Empno", OracleType.Number);
  1851. parm1.Direction = ParameterDirection.Input;
  1852. parm1.Value = 7902;
  1853. OracleParameter parm2 = new OracleParameter("io_cursor", OracleType.Cursor);
  1854. parm2.Direction = ParameterDirection.Output;
  1855. cmd.Parameters.Add(parm1);
  1856. cmd.Parameters.Add(parm2);
  1857. // positional parm
  1858. //cmd.Parameters.Add(new OracleParameter("io_cursor", OracleType.Cursor)).Direction = ParameterDirection.Output;
  1859. // named parm
  1860. //cmd.Parameters.Add("n_Empno", OracleType.Number, 4).Value = 7902;
  1861. OracleDataReader reader;
  1862. Console.WriteLine("Execute Non Query...");
  1863. cmd.ExecuteNonQuery();
  1864. Console.WriteLine("Get data reader (ref cursor) from out parameter...");
  1865. reader = (OracleDataReader) cmd.Parameters["io_cursor"].Value;
  1866. int x, count;
  1867. count = 0;
  1868. Console.WriteLine("Get data from ref cursor...");
  1869. while (reader.Read()) {
  1870. for (x = 0; x < reader.FieldCount; x++)
  1871. Console.Write(reader[x] + " ");
  1872. Console.WriteLine();
  1873. count += 1;
  1874. }
  1875. Console.WriteLine(count.ToString() + " Rows Returned.");
  1876. reader.Close();
  1877. }
  1878. static void RefCursorTest3(OracleConnection con)
  1879. {
  1880. Console.WriteLine("Ref Cursor Test 3 - CommandType.StoredProcedure - Begin...");
  1881. Console.WriteLine("Create command...");
  1882. OracleCommand cmd = new OracleCommand();
  1883. cmd.Connection = con;
  1884. cmd.CommandText = "curspkg_join.open_join_cursor1";
  1885. cmd.CommandType = CommandType.StoredProcedure;
  1886. // PL/SQL definition of stored procedure in package curspkg_join
  1887. // open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor)
  1888. Console.WriteLine("Create parameters...");
  1889. OracleParameter parm1 = new OracleParameter("n_Empno", OracleType.Number);
  1890. parm1.Direction = ParameterDirection.Input;
  1891. parm1.Value = 7902;
  1892. OracleParameter parm2 = new OracleParameter("io_cursor", OracleType.Cursor);
  1893. parm2.Direction = ParameterDirection.Output;
  1894. cmd.Parameters.Add(parm1);
  1895. cmd.Parameters.Add(parm2);
  1896. // positional parm
  1897. //cmd.Parameters.Add(new OracleParameter("io_cursor", OracleType.Cursor)).Direction = ParameterDirection.Output;
  1898. // named parm
  1899. //cmd.Parameters.Add("n_Empno", OracleType.Number, 4).Value = 7902;
  1900. OracleDataReader reader;
  1901. Console.WriteLine("Execute Non Query...");
  1902. cmd.ExecuteNonQuery();
  1903. Console.WriteLine("Get data reader (ref cursor) from out parameter...");
  1904. reader = (OracleDataReader) cmd.Parameters["io_cursor"].Value;
  1905. int x, count;
  1906. count = 0;
  1907. Console.WriteLine("Get data from ref cursor...");
  1908. while (reader.Read()) {
  1909. for (x = 0; x < reader.FieldCount; x++)
  1910. Console.Write(reader[x] + " ");
  1911. Console.WriteLine();
  1912. count += 1;
  1913. }
  1914. Console.WriteLine(count.ToString() + " Rows Returned.");
  1915. reader.Close();
  1916. }
  1917. static void ExternalAuthenticationTest ()
  1918. {
  1919. string user = Environment.UserName;
  1920. if (!Environment.UserDomainName.Equals(String.Empty))
  1921. user = Environment.UserDomainName + "\\" + Environment.UserName;
  1922. Console.WriteLine("Environment UserDomainName and UserName: " + user);
  1923. Console.WriteLine("Open connection using external authentication...");
  1924. OracleConnection con = new OracleConnection("Data Source=palis;Integrated Security=true");
  1925. try {
  1926. con.Open();
  1927. OracleCommand cmd = con.CreateCommand();
  1928. cmd.CommandText = "SELECT USER FROM DUAL";
  1929. OracleDataReader reader = cmd.ExecuteReader();
  1930. if (reader.Read())
  1931. Console.WriteLine("User: " + reader.GetString(reader.GetOrdinal("USER")));
  1932. con.Close();
  1933. }
  1934. catch (Exception e) {
  1935. Console.WriteLine("Exception caught: " + e.Message);
  1936. Console.WriteLine("Probably not setup for external authentication.");
  1937. }
  1938. con.Dispose();
  1939. con = null;
  1940. }
  1941. public static void TestPersistSucurityInfo1()
  1942. {
  1943. Console.WriteLine("\nTestPersistSucurityInfo1 - persist security info=false");
  1944. OracleConnection con = new OracleConnection("data source=palis;user id=scott;password=tiger;persist security info=false");
  1945. Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
  1946. con.Open();
  1947. Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
  1948. con.Close();
  1949. Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
  1950. con = null;
  1951. }
  1952. public static void TestPersistSucurityInfo2()
  1953. {
  1954. Console.WriteLine("\nTestPersistSucurityInfo2 - persist security info=true");
  1955. OracleConnection con = new OracleConnection("data source=palis;user id=scott;password=tiger;persist security info=true");
  1956. Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
  1957. con.Open();
  1958. Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
  1959. con.Close();
  1960. Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
  1961. con = null;
  1962. }
  1963. public static void TestPersistSucurityInfo3()
  1964. {
  1965. Console.WriteLine("\nTestPersistSucurityInfo3 - use default for persist security info which is false");
  1966. OracleConnection con = new OracleConnection("data source=palis;user id=scott;password=tiger");
  1967. Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
  1968. con.Open();
  1969. Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
  1970. con.Close();
  1971. Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
  1972. con = null;
  1973. }
  1974. public static void TestPersistSucurityInfo4()
  1975. {
  1976. Console.WriteLine("\nTestPersistSucurityInfo4 - persist security info=false with password at front");
  1977. OracleConnection con = new OracleConnection(";password=tiger;data source=palis;user id=scott;persist security info=false");
  1978. Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
  1979. con.Open();
  1980. Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
  1981. con.Close();
  1982. Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
  1983. con = null;
  1984. }
  1985. public static void TestPersistSucurityInfo5()
  1986. {
  1987. Console.WriteLine("\nTestPersistSucurityInfo5 - persist security info=false");
  1988. OracleConnection con = new OracleConnection("data source=palis;user id=scott;password=tiger;persist security info=false");
  1989. Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
  1990. con.Open();
  1991. Console.WriteLine("ConnectionString after open: " + con.ConnectionString);
  1992. Console.WriteLine("ConnectionState for con: " + con.State.ToString() + "\n");
  1993. Console.WriteLine("Clone OracleConnection...");
  1994. OracleConnection con2 = (OracleConnection) ((ICloneable) con).Clone();
  1995. Console.WriteLine("ConnectionState for con2: " + con2.State.ToString());
  1996. Console.WriteLine("con2 ConnectionString before open: " + con2.ConnectionString);
  1997. con2.Open();
  1998. Console.WriteLine("con2 ConnectionString after open: " + con2.ConnectionString);
  1999. con2.Close();
  2000. Console.WriteLine("con2 ConnectionString after close: " + con2.ConnectionString);
  2001. con.Close();
  2002. }
  2003. public static void TestPersistSucurityInfo6()
  2004. {
  2005. Console.WriteLine("\nTestPersistSucurityInfo6 - external auth using persist security info");
  2006. string user = Environment.UserName;
  2007. if (!Environment.UserDomainName.Equals(String.Empty))
  2008. user = Environment.UserDomainName + "\\" + Environment.UserName;
  2009. Console.WriteLine("Environment UserDomainName and UserName: " + user);
  2010. Console.WriteLine("Open connection using external authentication...");
  2011. OracleConnection con = new OracleConnection("Data Source=palis;Integrated Security=true");
  2012. Console.WriteLine("ConnectionString before open: " + con.ConnectionString);
  2013. try {
  2014. con.Open();
  2015. OracleCommand cmd = con.CreateCommand();
  2016. cmd.CommandText = "SELECT USER FROM DUAL";
  2017. OracleDataReader reader = cmd.ExecuteReader();
  2018. if (reader.Read())
  2019. Console.WriteLine("User: " + reader.GetString(reader.GetOrdinal("USER")));
  2020. con.Close();
  2021. Console.WriteLine("ConnectionString after close: " + con.ConnectionString);
  2022. }
  2023. catch (Exception e) {
  2024. Console.WriteLine("Exception caught: " + e.Message);
  2025. Console.WriteLine("Probably not setup for external authentication. This is fine.");
  2026. }
  2027. con.Dispose();
  2028. Console.WriteLine("ConnectionString after dispose: " + con.ConnectionString);
  2029. con = null;
  2030. Console.WriteLine("\n\n");
  2031. }
  2032. public static void ConnectionPoolingTest1 ()
  2033. {
  2034. Console.WriteLine("Start Connection Pooling Test 1...");
  2035. OracleConnection[] connections = null;
  2036. int maxCon = MAX_CONNECTIONS + 1; // add 1 more over the max connections to cause it to wait for the next available connection
  2037. int i = 0;
  2038. try {
  2039. connections = new OracleConnection[maxCon];
  2040. for (i = 0; i < maxCon; i++) {
  2041. Console.WriteLine(" Open connection: {0}", i);
  2042. connections[i] = new OracleConnection(conStr);
  2043. connections[i].Open ();
  2044. }
  2045. } catch (InvalidOperationException e) {
  2046. Console.WriteLine("Expected exception InvalidOperationException caught.");
  2047. Console.WriteLine(e);
  2048. }
  2049. for (i = 0; i < maxCon; i++) {
  2050. if (connections[i] != null) {
  2051. Console.WriteLine(" Close connection: {0}", i);
  2052. if (connections[i].State == ConnectionState.Open)
  2053. connections[i].Close ();
  2054. connections[i].Dispose ();
  2055. connections[i] = null;
  2056. }
  2057. }
  2058. connections = null;
  2059. Console.WriteLine("Done Connection Pooling Test 1.");
  2060. }
  2061. public static void ConnectionPoolingTest2 ()
  2062. {
  2063. Console.WriteLine("Start Connection Pooling Test 2...");
  2064. OracleConnection[] connections = null;
  2065. int maxCon = MAX_CONNECTIONS;
  2066. int i = 0;
  2067. connections = new OracleConnection[maxCon];
  2068. for (i = 0; i < maxCon; i++) {
  2069. Console.WriteLine(" Open connection: {0}", i);
  2070. connections[i] = new OracleConnection(conStr);
  2071. connections[i].Open ();
  2072. }
  2073. Console.WriteLine("Start another thread...");
  2074. t = new Thread(new ThreadStart(AnotherThreadProc));
  2075. t.Start ();
  2076. Console.WriteLine("Sleep...");
  2077. Thread.Sleep(100);
  2078. Console.WriteLine("Closing...");
  2079. for (i = 0; i < maxCon; i++) {
  2080. if (connections[i] != null) {
  2081. Console.WriteLine(" Close connection: {0}", i);
  2082. if (connections[i].State == ConnectionState.Open)
  2083. connections[i].Close ();
  2084. connections[i].Dispose ();
  2085. connections[i] = null;
  2086. }
  2087. }
  2088. connections = null;
  2089. }
  2090. private static void AnotherThreadProc ()
  2091. {
  2092. Console.WriteLine("Open connection via another thread...");
  2093. OracleConnection[] connections = null;
  2094. int maxCon = MAX_CONNECTIONS;
  2095. int i = 0;
  2096. connections = new OracleConnection[maxCon];
  2097. for (i = 0; i < maxCon; i++) {
  2098. Console.WriteLine(" Open connection: {0}", i);
  2099. connections[i] = new OracleConnection(conStr);
  2100. connections[i].Open ();
  2101. }
  2102. Console.WriteLine("Done Connection Pooling Test 2.");
  2103. System.Environment.Exit (0);
  2104. }
  2105. [STAThread]
  2106. static void Main(string[] args)
  2107. {
  2108. if(args.Length != 3) {
  2109. Console.WriteLine("Usage: mono TestOracleClient database userid password");
  2110. return;
  2111. }
  2112. string connectionString = String.Format(
  2113. "Data Source={0};" +
  2114. "User ID={1};" +
  2115. "Password={2}",
  2116. args[0], args[1], args[2]);
  2117. conStr = connectionString;
  2118. OracleConnection con1 = new OracleConnection();
  2119. ShowConnectionProperties (con1);
  2120. con1.ConnectionString = connectionString;
  2121. con1.InfoMessage += new OracleInfoMessageEventHandler (OnInfoMessage);
  2122. con1.StateChange += new StateChangeEventHandler (OnStateChange);
  2123. Console.WriteLine("Opening...");
  2124. con1.Open ();
  2125. Console.WriteLine("Opened.");
  2126. ShowConnectionProperties (con1);
  2127. Console.WriteLine ("Mono Oracle Test BEGIN ...");
  2128. MonoTest (con1);
  2129. Console.WriteLine ("Mono Oracle Test END ...");
  2130. Wait ("");
  2131. Console.WriteLine ("LOB Test BEGIN...");
  2132. CLOBTest (con1);
  2133. BLOBTest (con1);
  2134. Console.WriteLine ("LOB Test END.");
  2135. Wait ("");
  2136. Console.WriteLine ("Read Simple Test BEGIN - scott.emp...");
  2137. ReadSimpleTest(con1, "SELECT e.*, e.rowid FROM scott.emp e");
  2138. Console.WriteLine ("Read Simple Test END - scott.emp");
  2139. Wait ("");
  2140. Console.WriteLine ("DataAdapter Test BEGIN...");
  2141. DataAdapterTest(con1);
  2142. Console.WriteLine ("DataAdapter Test END.");
  2143. Wait ("");
  2144. Console.WriteLine ("DataAdapter Test 2 BEGIN...");
  2145. DataAdapterTest2(con1);
  2146. Console.WriteLine ("DataAdapter Test 2 END.");
  2147. Wait ("");
  2148. Console.WriteLine ("Rollback Test BEGIN...");
  2149. RollbackTest(con1);
  2150. Console.WriteLine ("Rollback Test END.");
  2151. Wait ("");
  2152. Console.WriteLine ("Commit Test BEGIN...");
  2153. CommitTest(con1);
  2154. Console.WriteLine ("Commit Test END.");
  2155. Wait ("");
  2156. Console.WriteLine ("Parameter Test BEGIN...");
  2157. ParameterTest(con1);
  2158. ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE7");
  2159. Console.WriteLine ("Parameter Test END.");
  2160. Wait ("");
  2161. Console.WriteLine ("Stored Proc Test 1 BEGIN...");
  2162. StoredProcedureTest1 (con1);
  2163. ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE1");
  2164. Console.WriteLine ("Stored Proc Test 1 END...");
  2165. Wait ("");
  2166. Console.WriteLine ("Stored Proc Test 2 BEGIN...");
  2167. StoredProcedureTest2 (con1);
  2168. ReadSimpleTest(con1, "SELECT * FROM MONO_TEST_TABLE2");
  2169. Console.WriteLine ("Stored Proc Test 2 END...");
  2170. Console.WriteLine ("Out Parameter and PL/SQL Block Test 1 BEGIN...");
  2171. OutParmTest1 (con1);
  2172. Console.WriteLine ("Out Parameter and PL/SQL Block Test 1 END...");
  2173. Console.WriteLine ("Out Parameter and PL/SQL Block Test 2 BEGIN...");
  2174. OutParmTest2 (con1);
  2175. Console.WriteLine ("Out Parameter and PL/SQL Block Test 2 END...");
  2176. Console.WriteLine ("Out Parameter and PL/SQL Block Test 3 BEGIN...");
  2177. OutParmTest3 (con1);
  2178. Console.WriteLine ("Out Parameter and PL/SQL Block Test 3 END...");
  2179. Console.WriteLine ("Out Parameter and PL/SQL Block Test 4 BEGIN...");
  2180. OutParmTest4 (con1);
  2181. Console.WriteLine ("Out Parameter and PL/SQL Block Test 4 END...");
  2182. Wait ("");
  2183. Console.WriteLine ("Test a Non Query using Execute Reader BEGIN...");
  2184. TestNonQueryUsingExecuteReader (con1);
  2185. Console.WriteLine ("Test a Non Query using Execute Reader END...");
  2186. Wait ("");
  2187. Console.WriteLine ("Null Aggregate Warning BEGIN test...");
  2188. NullAggregateTest (con1);
  2189. Console.WriteLine ("Null Aggregate Warning END test...");
  2190. Console.WriteLine ("Ref Cursor BEGIN tests...");
  2191. RefCursorTests (con1);
  2192. Console.WriteLine ("Ref Cursor END tests...");
  2193. Console.WriteLine("Closing...");
  2194. con1.Close ();
  2195. Console.WriteLine("Closed.");
  2196. conStr = conStr + ";pooling=true;min pool size=4;max pool size=" + MAX_CONNECTIONS.ToString ();
  2197. ConnectionPoolingTest1 (); ConnectionPoolingTest2 ();
  2198. // Need to have an external authentication user setup in Linux and oracle
  2199. // before running this test
  2200. //ExternalAuthenticationTest();
  2201. TestPersistSucurityInfo1();
  2202. TestPersistSucurityInfo2();
  2203. TestPersistSucurityInfo3();
  2204. TestPersistSucurityInfo4();
  2205. TestPersistSucurityInfo5();
  2206. TestPersistSucurityInfo6();
  2207. Console.WriteLine("Done.");
  2208. }
  2209. }
  2210. }