Consume Oracle connection created in C# using C class

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

LVL 27
SammyAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
jkrConnect With a Mentor Commented:
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
 
jkrCommented:
How is the connection represented?
0
 
SammyAuthor Commented:
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
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
SammyAuthor Commented:
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
 
jkrCommented:
Thus my question how the connection is represented - is that some handle embedded in a class or ...?
0
 
SammyAuthor Commented:
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
 
jkrCommented:
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
 
SammyAuthor Commented:
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
 
jkrCommented:
Well, how is it stored in C#? Once that is clear, a matching type for marsholling should be easy to find.
0
 
SammyAuthor Commented:
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
 
jkrCommented:
What is the declaration of the "Oracle DataAccess Object"?
0
 
SammyAuthor Commented:
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
 
jkrCommented:
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
 
SammyAuthor Commented:
call to open the connection where :connectstr is a connection string
exec sql connect :connectstr;
thensql execution like so
exec sql select * from............
0
 
SammyAuthor Commented:
jkr, you get an A for your effort. had to take a completely different path for this issue
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.