Skip to content

Commit cb3a7b7

Browse files
Merge pull request #762 from oracle-devrel/ws-dotnet
Ws dotnet
2 parents 5a9f93e + abf8015 commit cb3a7b7

File tree

4 files changed

+196
-0
lines changed

4 files changed

+196
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net7.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="23.2.0-dev" />
12+
</ItemGroup>
13+
14+
</Project>
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
// See https://aka.ms/new-console-template for more information
2+
using System.Text;
3+
using Oracle.ManagedDataAccess.Client;
4+
5+
internal class Program
6+
{
7+
8+
public static OracleConnection createDBConnection(string dbUsername,
9+
string dbPassword,
10+
string dbURL)
11+
{
12+
Console.WriteLine("\nConnecting to the database:");
13+
Console.WriteLine("Database URL : "+dbURL);
14+
Console.WriteLine("Database Username : "+dbUsername);
15+
OracleConnection dbConnection = new OracleConnection("User Id="+dbUsername+";" +
16+
"Password="+dbPassword+";" +
17+
"Data Source="+dbURL);
18+
dbConnection.Open();
19+
Console.WriteLine("\nConnected");
20+
Console.WriteLine("---------------");
21+
return dbConnection;
22+
}
23+
24+
public static void basicJDBCTest(OracleConnection dbConnection)
25+
{
26+
Console.WriteLine("\nExecuting a SELECT statement");
27+
OracleCommand sqlCmd = dbConnection.CreateCommand();
28+
sqlCmd.CommandText = "SELECT LAST_NAME, FIRST_NAME "
29+
+ "FROM EMPLOYEES "
30+
+ "ORDER BY LAST_NAME";
31+
OracleDataReader sqlReader = sqlCmd.ExecuteReader();
32+
Console.WriteLine("\nQuery executed. Printing out results");
33+
while (sqlReader.Read())
34+
{
35+
// result set processing, example
36+
Console.WriteLine(sqlReader.GetString(0)+" "+sqlReader.GetString(1));
37+
}
38+
Console.WriteLine("\nResults printed out. Executing INSERT statements in a tranaction context");
39+
OracleTransaction sqlTxn = dbConnection.BeginTransaction();
40+
sqlCmd.CommandText = "INSERT INTO EMPLOYEES_COPY "
41+
+ "SELECT * FROM EMPLOYEES "
42+
+ "WHERE DEPARTMENT_ID = 20";
43+
sqlCmd.ExecuteNonQuery();
44+
sqlCmd.CommandText = "INSERT INTO DEPARTMENTS_COPY "
45+
+ "SELECT * FROM DEPARTMENTS "
46+
+ "WHERE DEPARTMENT_ID = 20";
47+
sqlCmd.ExecuteNonQuery();
48+
49+
Console.WriteLine("\nDML statement executed. Commiting transaction");
50+
sqlTxn.Commit();
51+
Console.WriteLine("\nTransaction commited.");
52+
Console.WriteLine("----------------------------");
53+
}
54+
55+
public static void basicAQTest(OracleConnection dbConnection,
56+
string Message)
57+
{
58+
Console.WriteLine("\nStarting to demonstrate AQ/TEQ feature of Oracle Database");
59+
OracleTransaction sqlTxn = dbConnection.BeginTransaction();
60+
OracleCommand enqueueSampleMessage = dbConnection.CreateCommand();
61+
enqueueSampleMessage.CommandText = "sample_enqueue";
62+
enqueueSampleMessage.CommandType = System.Data.CommandType.StoredProcedure;
63+
64+
OracleCommand dequeueSampleMessage = dbConnection.CreateCommand();
65+
dequeueSampleMessage.CommandText = "sample_dequeue";
66+
dequeueSampleMessage.CommandType = System.Data.CommandType.StoredProcedure;
67+
68+
OracleParameter inputMessage = new OracleParameter("p_message", OracleDbType.Varchar2, 2000);
69+
inputMessage.Direction = System.Data.ParameterDirection.Input;
70+
inputMessage.Value = Message;
71+
72+
OracleParameter outputMessage = new OracleParameter("p_message", OracleDbType.Varchar2, 2000);
73+
outputMessage.Direction = System.Data.ParameterDirection.Output;
74+
75+
76+
enqueueSampleMessage.Parameters.Add(inputMessage);
77+
78+
dequeueSampleMessage.Parameters.Add(outputMessage);
79+
80+
enqueueSampleMessage.ExecuteNonQuery();
81+
dequeueSampleMessage.ExecuteNonQuery();
82+
83+
Console.WriteLine(outputMessage.Value);
84+
85+
sqlTxn.Commit();
86+
87+
Console.WriteLine("Enqueueing/Dequeueing sample message completed succesfully.");
88+
}
89+
90+
public static void closeDBConnection (OracleConnection dbConnection)
91+
{
92+
Console.WriteLine("\nClosing DB connection.");
93+
dbConnection.Close();
94+
Console.WriteLine("Connection closed.");
95+
Console.WriteLine("----------------------------");
96+
}
97+
98+
private static void nativeAQTest(OracleConnection dbConnection)
99+
{
100+
OracleTransaction txn = dbConnection.BeginTransaction();
101+
OracleAQQueue sample_message_queue = new OracleAQQueue("sample_message_queue",dbConnection);
102+
sample_message_queue.MessageType = OracleAQMessageType.Raw;
103+
OracleAQMessage msgIn = new OracleAQMessage();
104+
msgIn.Payload = Encoding.UTF8.GetBytes("Another test payload");
105+
sample_message_queue.Enqueue(msgIn);
106+
Console.WriteLine("A message has been put into the test queue");
107+
txn.Commit();
108+
109+
txn = dbConnection.BeginTransaction();
110+
OracleAQMessage msgOut = sample_message_queue.Dequeue();
111+
txn.Commit();
112+
Console.WriteLine(Encoding.UTF8.GetString(msgOut.Payload as byte[]));
113+
}
114+
private static void Main(string[] args)
115+
{
116+
try
117+
{
118+
string dbUrl, dbUsername, dbPassword;
119+
120+
Console.Write("Please, provide database connection string : ");
121+
dbUrl = Console.ReadLine();
122+
123+
Console.Write("Username : ");
124+
dbUsername = Console.ReadLine();
125+
126+
Console.Write("Password : ");
127+
dbPassword = Console.ReadLine();
128+
129+
130+
OracleConnection dbConnection = createDBConnection(dbUsername,
131+
dbPassword,
132+
dbUrl);
133+
134+
basicJDBCTest(dbConnection);
135+
136+
basicAQTest(dbConnection,"Test Message 01");
137+
138+
nativeAQTest(dbConnection);
139+
140+
closeDBConnection(dbConnection);
141+
}
142+
catch (Exception e)
143+
{
144+
Console.WriteLine(e);
145+
}
146+
}
147+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# .NET and Oracle Database Advanced Queuing.
2+
3+
.NET is one of the most frequently used developer platform, also for database-centric applications developed on top of an Oracle Database. This demo presents two ways of using Advanced Queuing in a .NET application:
4+
- by using traditional PL/SQL calls
5+
- by using new, native AQ interface implemented in Oracle Data Access Provider 23c
6+
7+
Review Date: 25.01.2024
8+
9+
## Useful Links
10+
11+
- [Oracle Data Provider for .NET main page](https://www.oracle.com/pl/database/technologies/appdev/dotnet/odp.html)
12+
13+
### Documentation
14+
15+
- [Oracle Data Provider for .NET 23c documentation](https://docs.oracle.com/en/database/oracle/oracle-database/23/odpnt/index.html#Oracle%C2%AE-Data-Provider-for-.NET)
16+
- [Transactional Event Queues and Advanced Queuing User's Guide 23c](https://docs.oracle.com/en/database/oracle/oracle-database/23/adque/index.html#Oracle%C2%AE-Database)
17+
18+
19+
### Blogs
20+
21+
- [Apache Kafka versus Oracle Transactional Event Queues (TEQ) as Microservices Event Mesh](https://blogs.oracle.com/developers/post/apache-kafka-versus-oracle-transactional-event-queues-teq-as-microservices-event-mesh)
22+
23+
- [Developing Event-Driven Microservices in Java, JavaScript, Python, .NET, and Go with AQ/TEQ in the Oracle Database] (https://blogs.oracle.com/developers/post/developing-event-driven-microservices-in-java-javascript-python-net-and-go-with-aqteq-in-the-oracle-converged-database)
24+
25+
### LiveLabs Workshops
26+
27+
- [.NET Development with Oracle Autonomous Database Quick Start](https://apexapps.oracle.com/pls/apex/r/dbpm/livelabs/view-workshop?wid=3359&clear=RR,180&session=107805569953867)
28+
29+
# License
30+
31+
Copyright (c) 2023 Oracle and/or its affiliates.
32+
33+
Licensed under the Universal Permissive License (UPL), Version 1.0.
34+
35+
See [LICENSE](https://github.com/oracle-devrel/technology-engineering/blob/main/LICENSE) for more details.test content

0 commit comments

Comments
 (0)