TestOracleClient.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  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. // Author:
  15. // Daniel Morgan <[email protected]>
  16. //
  17. // Copyright (C) Daniel Morgan, 2002
  18. //
  19. // Expected Results:
  20. // 3 new rows where ENAME being: 'conn3', 'conn9', and 'conn1'
  21. using System;
  22. using System.Runtime.InteropServices;
  23. using System.Data;
  24. using System.Data.OracleClient;
  25. namespace Test.OracleClient
  26. {
  27. public class OracleTest
  28. {
  29. public OracleTest()
  30. {
  31. }
  32. static void DoTest1(OracleConnection con, int conn)
  33. {
  34. string inst = conn.ToString();
  35. string insertSql =
  36. "insert into scott.emp " +
  37. "(empno, ename, job, sal, deptno) " +
  38. "values(123" + inst + "," +
  39. "'conn" + inst + "'," +
  40. "'homy" + inst + "'," +
  41. "321" + inst + ",20)";
  42. Console.WriteLine("insertSql: " + insertSql);
  43. OracleCommand cmd = new OracleCommand();
  44. cmd.Connection = con;
  45. cmd.CommandText = insertSql;
  46. cmd.ExecuteNonQuery();
  47. if(conn == 2)
  48. cmd.CommandText = "rollback";
  49. else
  50. cmd.CommandText = "commit";
  51. cmd.ExecuteNonQuery();
  52. }
  53. static void DoTest9(OracleConnection con) {
  54. string inst = "9";
  55. string insertSql =
  56. "insert into scott.emp " +
  57. "(empno, ename, job, sal, deptno) " +
  58. "values(123" + inst + "," +
  59. "'conn" + inst + "'," +
  60. "'homy" + inst + "'," +
  61. "321" + inst + ",20)";
  62. Console.WriteLine("insertSql: " + insertSql);
  63. OracleCommand cmd = new OracleCommand();
  64. cmd.Connection = con;
  65. cmd.CommandText = insertSql;
  66. cmd.ExecuteNonQuery();
  67. cmd.CommandText = "commit";
  68. cmd.ExecuteNonQuery();
  69. }
  70. static void ReadSimpleTest(OracleConnection con)
  71. {
  72. string selectSql =
  73. "SELECT ename, job FROM scott.emp";
  74. OracleCommand cmd = new OracleCommand();
  75. cmd.Connection = con;
  76. cmd.CommandText = selectSql;
  77. OracleDataReader reader = cmd.ExecuteReader();
  78. Console.WriteLine("Results...");
  79. Console.WriteLine("Schema");
  80. DataTable table;
  81. table = reader.GetSchemaTable();
  82. for(int c = 0; c < reader.FieldCount; c++) {
  83. Console.WriteLine(" Column " + c.ToString());
  84. DataRow row = table.Rows[c];
  85. string ColumnName = (string) row["ColumnName"];
  86. string BaseColumnName = (string) row["BaseColumnName"];
  87. int ColumnSize = (int) row["ColumnSize"];
  88. int NumericScale = Convert.ToInt32( row["NumericScale"]);
  89. int NumericPrecision = Convert.ToInt32(row["NumericPrecision"]);
  90. Type DataType = (Type) row["DataType"];
  91. Console.WriteLine(" ColumnName: " + ColumnName);
  92. Console.WriteLine(" BaseColumnName: " + BaseColumnName);
  93. Console.WriteLine(" ColumnSize: " + ColumnSize.ToString());
  94. Console.WriteLine(" NumericScale: " + NumericScale.ToString());
  95. Console.WriteLine(" NumericPrecision: " + NumericPrecision.ToString());
  96. Console.WriteLine(" DataType: " + DataType.ToString());
  97. }
  98. int row = 0;
  99. Console.WriteLine("Data");
  100. while(reader.Read()) {
  101. row++;
  102. Console.WriteLine(" Row: " + row.ToString());
  103. for(int f = 0; f < reader.FieldCount; f++) {
  104. object ovalue;
  105. string svalue;
  106. ovalue = reader.GetValue(0);
  107. svalue = ovalue.ToString();
  108. Console.WriteLine(" Field: " + f.ToString());
  109. Console.WriteLine(" Value: " + svalue);
  110. }
  111. }
  112. if(row == 0)
  113. Console.WriteLine("No data returned.");
  114. }
  115. static void DataAdapterTest (OracleConnection connection)
  116. {
  117. OracleCommand command = connection.CreateCommand ();
  118. command.CommandText = "SELECT * FROM EMP";
  119. OracleDataAdapter adapter = new OracleDataAdapter (command);
  120. DataSet dataSet = new DataSet ("EMP");
  121. adapter.Fill (dataSet);
  122. DataTable table = dataSet.Tables [0];
  123. int rowCount = 0;
  124. foreach (DataRow row in table.Rows) {
  125. Console.WriteLine ("row {0}", rowCount + 1);
  126. for (int i = 0; i < table.Columns.Count; i += 1) {
  127. Console.WriteLine ("{0}:{1}", table.Columns [i].ColumnName, row [i]);
  128. }
  129. Console.WriteLine ();
  130. rowCount += 1;
  131. }
  132. }
  133. static void RollbackTest (OracleConnection connection)
  134. {
  135. OracleTransaction transaction = connection.BeginTransaction ();
  136. OracleCommand insert = connection.CreateCommand ();
  137. insert.Transaction = transaction;
  138. insert.CommandText = "INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
  139. Console.WriteLine ("Inserting record ...");
  140. insert.ExecuteNonQuery ();
  141. OracleCommand select = connection.CreateCommand ();
  142. select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
  143. select.Transaction = transaction;
  144. OracleDataReader reader = select.ExecuteReader ();
  145. reader.Read ();
  146. Console.WriteLine ("Row count SHOULD BE 1, VALUE IS {0}", reader.GetValue (0));
  147. reader.Close ();
  148. Console.WriteLine ("Rolling back transaction ...");
  149. transaction.Rollback ();
  150. select = connection.CreateCommand ();
  151. select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
  152. reader = select.ExecuteReader ();
  153. reader.Read ();
  154. Console.WriteLine ("Row count SHOULD BE 0, VALUE IS {0}", reader.GetValue (0));
  155. reader.Close ();
  156. }
  157. static void CommitTest (OracleConnection connection)
  158. {
  159. OracleTransaction transaction = connection.BeginTransaction ();
  160. OracleCommand insert = connection.CreateCommand ();
  161. insert.Transaction = transaction;
  162. insert.CommandText = "INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES (8787, 'T Coleman', 'Monoist')";
  163. Console.WriteLine ("Inserting record ...");
  164. insert.ExecuteNonQuery ();
  165. OracleCommand select = connection.CreateCommand ();
  166. select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
  167. select.Transaction = transaction;
  168. Console.WriteLine ("Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
  169. Console.WriteLine ("Committing transaction ...");
  170. transaction.Commit ();
  171. select = connection.CreateCommand ();
  172. select.CommandText = "SELECT COUNT(*) FROM EMP WHERE EMPNO = 8787";
  173. Console.WriteLine ("Row count SHOULD BE 1, VALUE IS {0}", select.ExecuteScalar ());
  174. transaction = connection.BeginTransaction ();
  175. OracleCommand delete = connection.CreateCommand ();
  176. delete.Transaction = transaction;
  177. delete.CommandText = "DELETE FROM EMP WHERE EMPNO = 8787";
  178. delete.ExecuteNonQuery ();
  179. transaction.Commit ();
  180. }
  181. public static void ParameterTest (OracleConnection connection)
  182. {
  183. OracleTransaction transaction = connection.BeginTransaction ();
  184. OracleCommand insert = connection.CreateCommand ();
  185. insert.Transaction = transaction;
  186. insert.CommandText = "INSERT INTO EMP (EMPNO, ENAME, JOB) VALUES (:P1, :P2, :P3)";
  187. insert.Parameters.Add (":P1", 8888);
  188. insert.Parameters.Add (":P2", "danmorg");
  189. insert.Parameters.Add (":P3", "Monoist");
  190. Console.WriteLine ("INSERTING DATA WITH PARAMETERS...");
  191. Console.WriteLine (insert.CommandText);
  192. insert.Prepare ();
  193. insert.ExecuteNonQuery ();
  194. OracleCommand select = connection.CreateCommand ();
  195. select.Transaction = transaction;
  196. select.CommandText = "SELECT ENAME, JOB FROM EMP WHERE EMPNO=:P1";
  197. select.Parameters.Add (":P1", 8888);
  198. Console.WriteLine ("VERIFYING RESULTS ...");
  199. OracleDataReader reader = select.ExecuteReader ();
  200. if (!reader.Read ())
  201. Console.WriteLine ("ERROR: RECORD NOT FOUND");
  202. Console.WriteLine ("ENAME - SHOULD BE danmorg, is {0}", reader.GetValue (0));
  203. Console.WriteLine ("JOB - SHOULD BE Monoist, is {0}", reader.GetValue (1));
  204. reader.Close ();
  205. Console.WriteLine ("ROLLBACK TRANSACTION...");
  206. transaction.Rollback ();
  207. }
  208. public static void LOBTest (OracleConnection connection)
  209. {
  210. Console.WriteLine ("BEGIN TRANSACTION ...");
  211. OracleTransaction transaction = connection.BeginTransaction ();
  212. Console.WriteLine ("CREATE TABLE ...");
  213. OracleCommand create = connection.CreateCommand ();
  214. create.Transaction = transaction;
  215. create.CommandText = "CREATE TABLE LOBTEST (CLOB_COLUMN CLOB)";
  216. create.ExecuteNonQuery ();
  217. Console.WriteLine ("INSERT RECORD ...");
  218. OracleCommand insert = connection.CreateCommand ();
  219. insert.Transaction = transaction;
  220. insert.CommandText = "INSERT INTO LOBTEST VALUES ('1234')";
  221. insert.ExecuteNonQuery ();
  222. OracleCommand select = connection.CreateCommand ();
  223. select.Transaction = transaction;
  224. select.CommandText = "SELECT CLOB_COLUMN FROM LOBTEST";
  225. Console.WriteLine ("SELECTING A CLOB (CHARACTER) VALUE FROM CLOBTEST");
  226. OracleDataReader reader = select.ExecuteReader ();
  227. if (!reader.Read ())
  228. Console.WriteLine ("ERROR: RECORD NOT FOUND");
  229. reader.Close ();
  230. Console.WriteLine ("ROLLBACK TRANSACTION ...");
  231. transaction.Rollback ();
  232. }
  233. static void Wait(string msg)
  234. {
  235. Console.WriteLine(msg);
  236. Console.WriteLine("Waiting... Press Enter to continue...");
  237. string nothing = Console.ReadLine();
  238. }
  239. [STAThread]
  240. static void Main(string[] args)
  241. {
  242. if(args.Length != 3) {
  243. Console.WriteLine("Usage: mono TestOracleClient database userid password");
  244. return;
  245. }
  246. string connectionString = String.Format(
  247. "Data Source={0};" +
  248. "User ID={1};" +
  249. "Password={2}",
  250. args[0], args[1], args[2]);
  251. Wait("Verify database.");
  252. OracleConnection con1 = new OracleConnection();
  253. con1.ConnectionString = connectionString;
  254. con1.Open();
  255. Wait("Verify 1 connection.");
  256. OracleConnection con2 = new OracleConnection();
  257. con2.ConnectionString = connectionString;
  258. con2.Open();
  259. Wait("Verify 2 connections.");
  260. OracleConnection con3 = new OracleConnection();
  261. con3.ConnectionString = connectionString;
  262. con3.Open();
  263. Wait("Verify 3 connections.");
  264. //DoTest1(con1, 1);
  265. //DoTest1(con2, 2);
  266. //DoTest1(con3, 3);
  267. //DoTest9(con1);
  268. Console.WriteLine ("LOB Test BEGIN...");
  269. LOBTest (con1);
  270. Console.WriteLine ("LOB Test END.");
  271. Console.WriteLine ("Read Simple Test BEGIN...");
  272. ReadSimpleTest(con1);
  273. Console.WriteLine ("Read Simple Test END.");
  274. Wait ("Press enter to continue ...");
  275. Console.WriteLine ("DataAdapter Test BEGIN...");
  276. DataAdapterTest(con1);
  277. Console.WriteLine ("DataAdapter Test END.");
  278. Console.WriteLine ("Rollback Test BEGIN...");
  279. RollbackTest(con1);
  280. Console.WriteLine ("Rollback Test END.");
  281. Console.WriteLine ("Commit Test BEGIN...");
  282. CommitTest(con1);
  283. Console.WriteLine ("Commit Test END.");
  284. Console.WriteLine ("Parameter Test BEGIN...");
  285. ParameterTest(con1);
  286. Console.WriteLine ("Parameter Test END.");
  287. Wait("Verify Proper Results.");
  288. con1.Close();
  289. Wait("Verify 2 connections left.");
  290. con2.Close();
  291. Wait("Verify 1 connection left.");
  292. con3.Close();
  293. Wait("Verify all disconnected.");
  294. }
  295. }
  296. }