Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Consume Oracle connection created in C# using C class

Posted on 2007-11-15
15
Medium Priority
?
799 Views
Last Modified: 2010-04-21
I was wondering if this is possible.
I have a C# wrapper class wrapping a C class
The C class perform database manipulating methods "inserts, updated and deletes".
Now the trick here is the C# class opens the connection to the database and we need the C class to consume this connection, we can send the connection as a parameter from the C# class to one of the methods in the C class, the problem is how to make C class to consume this connection without having to open a new one?
any ideas or pointers will be greatly appreciated

thanks

0
Comment
Question by:Sammy Ageil
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 7
15 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 20291161
How is the connection represented?
0
 
LVL 27

Author Comment

by:Sammy Ageil
ID: 20291243
the connection should be sent an Oracle Object
string connString = "Data Source=(DESCRIPTION="              
             + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=SERVER)(PORT=1521)))"
             + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));"
             + "User Id=ID;Password=Password;";

OracleConnection conn = new OracleConnection(connString)
conn.Open();

whats being sent will be the conn object which is an Oracle dataAccess client
0
 
LVL 86

Accepted Solution

by:
jkr earned 2000 total points
ID: 20291286
Well, if you want to pass the connection string to the C part, that is not a big deal, but the connection itself might be problematic. To pass the string, you'd use

using System.Runtime.InteropServices; // DllImport
public class CCode {
  [DllImport("ccode.Dll")]
  public static extern void SetConnectionString(String s);
}

with the function being

void SetConnectionString(LPCSTR s);
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 27

Author Comment

by:Sammy Ageil
ID: 20291319
I know how to pass the connectionstring, that wont be a big deal, I need to pass  the connection itself so C doesnt need to open an additional connection since the C# class is creating and opening the connection due to preset requirements
0
 
LVL 86

Expert Comment

by:jkr
ID: 20291770
Thus my question how the connection is represented - is that some handle embedded in a class or ...?
0
 
LVL 27

Author Comment

by:Sammy Ageil
ID: 20291945
Yes the connection is created in the C# class which wraps the C class.
this method calls a C method providing 6 params used when updating the database tables and the Idea is to send the connection as object as a parameter to the C method
C# class uses the InteropServices and DllImport the C class
the connection  object does not need to be an Oracle DataAccess client. we can even use ODBC if Oracle will not handle this type of converion between C# and C
does this make any sense?
0
 
LVL 86

Expert Comment

by:jkr
ID: 20292061
I think I got that. But, how is it stored? You won't be able to send a C# object to a C function, but is the connection object storing some sort of handle and if so, what basic type is that?
0
 
LVL 27

Author Comment

by:Sammy Ageil
ID: 20292107
thats the problem, my knowledge in C is limited and I have no idea how to store the connection object to make it usable in C
0
 
LVL 86

Expert Comment

by:jkr
ID: 20292176
Well, how is it stored in C#? Once that is clear, a matching type for marsholling should be easy to find.
0
 
LVL 27

Author Comment

by:Sammy Ageil
ID: 20292444
Connection object is just an Oracle DataAccess Object. what do you mean by how it stored? its a C# method that returns an object.
is that what you mean or am I missing something there?

Thanks
0
 
LVL 86

Expert Comment

by:jkr
ID: 20292603
What is the declaration of the "Oracle DataAccess Object"?
0
 
LVL 27

Author Comment

by:Sammy Ageil
ID: 20292688
C# uses these using statements to reference the Oracle.DataAcess.dll which is added as a reference in VS.Net 2005

using System.Data;              
using Oracle.DataAccess.Client;
connection object is declared like this

OracleConnection conn = new OracleConnection(connString)
conn.Open();
0
 
LVL 86

Expert Comment

by:jkr
ID: 20293185
Well, if you cannot find and more specific documantation on that, you'll probably have to resort to passing the connection string. How is the C code using the connection?
0
 
LVL 27

Author Comment

by:Sammy Ageil
ID: 20295788
call to open the connection where :connectstr is a connection string
exec sql connect :connectstr;
thensql execution like so
exec sql select * from............
0
 
LVL 27

Author Closing Comment

by:Sammy Ageil
ID: 31409386
jkr, you get an A for your effort. had to take a completely different path for this issue
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The article shows the basic steps of integrating an HTML theme template into an ASP.NET MVC project
The goal of this video is to provide viewers with basic examples to understand how to create, access, and change arrays in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question