using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System; using System.Data.OracleClient; namespace Abkezel_demo { class OraTest { private OracleConnection con; void Connect() { con = new OracleConnection(); con.ConnectionString = "User Id=system; Password=user; Data Source = localhost"; try { con.Open(); Console.WriteLine("Connected to Oracle" + con.ServerVersion); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void Close() { con.Close(); con.Dispose(); Console.WriteLine("Sikeres kapcsolatbontás"); } void CreateTable() { try { OracleCommand command = con.CreateCommand(); command.CommandText = "CREATE TABLE auto_C# (rsz char(6) " + "primary key, tipus char(10) not null, szin char(10) default 'piros', " + "evjarat number(4), ar number(8) check (ar>0) )"; command.ExecuteNonQuery(); Console.WriteLine("Sikeres auto_C# tábla létrehozás"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void InsertData() { try { OracleCommand command = con.CreateCommand(); command.CommandText = "INSERT INTO auto_C# VALUES ('abc123', " + " 'mazda', 'fekete', 2012, 1650000)"; command.ExecuteNonQuery(); Console.WriteLine("Sikeres adatfelvitel"); string[] sql_stmts = new string[3] { "INSERT INTO auto_C# VALUES('aaa111','opel','fekete',2014,1850000)", "INSERT INTO auto_C# VALUES('aaa222','skoda',null,2014,1850000)", "INSERT INTO auto_C# (rsz, tipus, evjarat, ar)VALUES ('aaa333','mazda',2014,1850000)" }; for (int i = 0; i < sql_stmts.Length; i++) { command.CommandText = sql_stmts[i]; command.ExecuteNonQuery(); Console.WriteLine("Sikeres adatfelvitel"); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void SelectData() { try { OracleCommand command = con.CreateCommand(); command.CommandText = "SELECT * FROM auto_C#"; OracleDataReader reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { OracleString rsz = reader.GetOracleString(0); Console.Write(rsz.ToString() + " "); OracleString tipus = reader.GetOracleString(1); Console.Write(tipus.ToString() + " "); OracleString szin = reader.GetOracleString(2); Console.Write(szin.ToString() + " "); OracleNumber evjarat = reader.GetOracleNumber(3); Console.Write(evjarat.ToString() + " "); OracleNumber ar = reader.GetOracleNumber(4); Console.WriteLine(ar.ToString() + " "); //Dátum típusú mező esetén //OracleDateTime d = reader.GetOracleDateTime(mezőindex); //Console.WriteLine(d.ToString()); } } else { Console.WriteLine("No rows found"); } reader.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void ParametrizedInsert() { string cmdText = "INSERT INTO auto_C# VALUES (:rsz, :tipus, :szin, :evjarat, :ar)"; OracleCommand command = new OracleCommand(cmdText, con); Console.WriteLine("Paraméteres adatfelvitel"); Console.Write("Rendszám: "); string c_rsz = Console.ReadLine(); Console.Write("Típus: "); string c_tipus = Console.ReadLine(); Console.Write("Szín: "); string c_szin = Console.ReadLine(); Console.Write("Évjárat: "); string c_evjarat = Console.ReadLine(); Console.Write("Ár: "); string c_ar = Console.ReadLine(); /* Paraméterek és változók kötése */ command.Parameters.Add(new OracleParameter("rsz", c_rsz)); command.Parameters.Add(new OracleParameter("tipus", c_tipus)); command.Parameters.Add(new OracleParameter("szin", c_szin)); command.Parameters.Add(new OracleParameter("evjarat", c_evjarat)); command.Parameters.Add(new OracleParameter("ar", c_ar)); try { command.ExecuteNonQuery(); Console.WriteLine("Sikeres paraméteres adatfelvitel"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void ParametrizedQuery() { string cmdText = "SELECT * FROM auto_C# where trim(tipus) = :c_tip and ar > :c_ar"; OracleCommand command = new OracleCommand(cmdText, con); //co command.Parameters.Add(new OracleParameter("c_tip", "mazda")); //command.Parameters.AddWithValue("c_tip", "mazda"); //típusprobléma lehet! //command.Parameters.Add("c_tip", OracleType.VarChar); //command.Parameters["c_tip"].Value = "mazda"; //command.Parameters.Add(new OracleParameter("c_ar", "1800000")); //command.Parameters.AddWithValue("c_ar", "1800000"); command.Parameters.Add("c_ar", OracleType.Double); command.Parameters["c_ar"].Value = 1800000; try { OracleDataReader reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { OracleString rsz = reader.GetOracleString(0); Console.Write(rsz.ToString() + " "); OracleString tipus = reader.GetOracleString(1); Console.Write(tipus.ToString() + " "); OracleString szin = reader.GetOracleString(2); Console.Write(szin.ToString() + " "); OracleNumber evjarat = reader.GetOracleNumber(3); Console.Write(evjarat.ToString() + " "); OracleNumber ar = reader.GetOracleNumber(4); Console.WriteLine(ar.ToString() + " "); } } else { Console.WriteLine("No rows found"); } reader.Close(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void InProcedureCall() { try { OracleCommand command = con.CreateCommand(); //Megadott életkornál idősebb autók árának csökkentése command.CommandText = "create or replace procedure C#_arcsokkent " + "(kor in number) is " + "begin " + "update auto_C# set ar=ar*0.9 where " + "to_char(sysdate, 'yyyy')-evjarat > kor; " + "end;"; command.ExecuteNonQuery(); Console.WriteLine("Tárolt eljárás létrejött"); command = new OracleCommand("C#_arcsokkent", con); command.CommandType = System.Data.CommandType.StoredProcedure; //Sample of how to bind parameters to the Stored Procedure OracleParameter korIn = new OracleParameter(); korIn.Value = 5; //5 évnél idősebb autók árának 10%-os csökkentése korIn.ParameterName = "kor"; command.Parameters.Add(korIn); korIn.Direction = System.Data.ParameterDirection.Input; //Execute stored procedure call command.ExecuteNonQuery(); Console.WriteLine("Sikeres tárolt eljárás hívás"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void OutProcedureCall() { try { OracleCommand command = con.CreateCommand(); //Megadott színű autók átlagárának lekérdezése command.CommandText = "create or replace procedure C#_atlagar " + "(sz in char, atl out number) is " + "begin " + "select avg(ar) into atl from auto_C# where trim(szin) = sz; " + "end;"; command.ExecuteNonQuery(); Console.WriteLine("Tárolt eljárás létrejött"); command = new OracleCommand("C#_atlagar", con); command.CommandType = System.Data.CommandType.StoredProcedure; //Sample of how to bind parameters to the Stored Procedure OracleParameter szinIn = new OracleParameter("sz", OracleType.VarChar); Console.Write("Milyen színű autók átlagárát kérdezed? "); szinIn.Value = Console.ReadLine(); szinIn.Direction = System.Data.ParameterDirection.Input; command.Parameters.Add(szinIn); OracleParameter atlOut = new OracleParameter("atl", OracleType.Number); atlOut.Direction = System.Data.ParameterDirection.Output; command.Parameters.Add(atlOut); //Execute stored procedure call command.ExecuteNonQuery(); //A paraméterek tömbje 0-tól indexelődik Console.WriteLine("Eljárás eredmény: " + command.Parameters[1].Value); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void FunctionCall() { try { OracleCommand command = con.CreateCommand(); //Megadott színű autók átlagárának lekérdezése command.CommandText = "create or replace function C#_atlagarfv " + "(sz in char) return number is " + "atl number(10,2); " + "begin " + "select avg(ar) into atl from auto_C# where trim(szin) = sz; " + "return atl; " + "end;"; command.ExecuteNonQuery(); Console.WriteLine("Tárolt eljárás létrejött"); command = new OracleCommand("C#_atlagarfv", con); command.CommandType = System.Data.CommandType.StoredProcedure; //Sample of how to bind parameters to the Stored Procedure OracleParameter szinIn = new OracleParameter("sz", OracleType.VarChar); Console.Write("Milyen színű autók átlagárát kérdezed? "); szinIn.Value = Console.ReadLine(); szinIn.Direction = System.Data.ParameterDirection.Input; command.Parameters.Add(szinIn); OracleParameter atlOut = new OracleParameter("atl", OracleType.Number); atlOut.Direction = System.Data.ParameterDirection.ReturnValue; command.Parameters.Add(atlOut); //Execute stored procedure call command.ExecuteNonQuery(); //A paraméterek tömbje 0-tól indexelődik Console.WriteLine("Függvény eredmény: " + command.Parameters[1].Value); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } void OracleTransaction() { OracleCommand command = con.CreateCommand(); OracleTransaction myTrans; // Start a local transaction myTrans = con.BeginTransaction(System.Data.IsolationLevel.ReadCommitted); // Assign transaction object for a pending local transaction command.Transaction = myTrans; try { command.CommandText = "update auto_C# set ar=ar-:csokkentes"; command.Parameters.Add("csokkentes", OracleType.Double); Console.WriteLine("Mennyivel csökkentsük az autók árát? "); command.Parameters["csokkentes"].Value = double.Parse(Console.ReadLine()); command.ExecuteNonQuery(); myTrans.Commit(); Console.WriteLine("Sikeres árcsökkentés"); } catch (Exception ex) { myTrans.Rollback(); Console.WriteLine("Árcsökkentés nem lehetséges"); } } public static void Main(string[] args) { OraTest test = new OraTest(); test.Connect(); test.CreateTable(); test.InsertData(); test.SelectData(); test.ParametrizedInsert(); test.ParametrizedQuery(); test.InProcedureCall(); test.OutProcedureCall(); test.FunctionCall(); test.OracleTransaction(); Console.ReadKey(); } } }