25. maj 2005 - 17:18Der er
16 kommentarer og 1 løsning
Oracle og .NET
Findes der en måde at connecte til en oracle DB fra ASP.NET, som ikke kræver installation af sqlclient. Hvis ikke hvordan er så licensforholdene mht SQLClient?
Ja jeg mente naturligvis Oracle's SQL Net Client. Vi anvender Oracle 8.1.7, så ODB.NET går ikke. Så vidt jeg kan konstatere kræver System.Data.OracleClient at SQL Net Client 8.1.7 or later er installeret. Det jeg ikke helt kan gennemskue er hvad OleDB og ODBC kræver skal være installeret
Ja men såvidt jeg kan se skal der også være Oracle's SQL Net Client installeret. Begge anvender i hvert fald alias fra tnsnames.ora til datasource i connectstrengen. Det jeg gerne ville have var en connectmetode a la Java thin client, som ikke kræver at SQL Net Client er installeret. Har du en .NET oracle connection til at køre uden SQL Net Client installeret?
Synes godt om
Slettet bruger
26. maj 2005 - 13:42#8
Vi har førsøgt det, der hvor jeg arbejder - uden held, så såvidt jeg ved skal du med både .NET 1.1 OracleClient og Oracle ODP installere Oracle client software før det fungerer. Det skal du naturligt vis også med ODBC og OLEDB, argumentet for at anvende en at disse metoder er alene at det tillader anvendelse af ældre klient versioner end 8.1.7 ellers er både OracleClient og ODP langt mere funktionelle end de andre grænseflader.
Det lyder som om det er kun er thin JDBC driver der virker uden client software installeret.
Så du skal nok have kontaktet Oracle og høre om det koster noget at installere Oracle client på din ASP.NET server.
Jeg tror det faktisk ikke.
Hvis support ikke betyder noget og I ikke går i panik over ordet GPL (hvis man kører Oracle er det dog næppe tilfældet), så er der en rigtig dirty solution:
brug IKVM og thin JDBC driver
Jeg har lige testet med:
using System; using java.lang; using java.sql;
public class TestDB { public static void Main(string[] args) { Class.forName("oracle.jdbc.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Test", "xxxx", "xxxx"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM T1"); while(rs.next()) { int f1 = rs.getInt(1); string f2 = rs.getString(2); Console.WriteLine(f1 + " " + f2); } } }
og det virker faktisk (eksempelt er banalt men hvis det virker så virker resten sikkert også).
Det ser ellers smart ud, men vi har masser af Oracle licenser. Vi ville bare ikke installere SQLNet-clienten på serveren, hvis ikke det var nødvendigt. Men din løsning kræver jo så også at vi skal installere IKVM-components, og så vil jeg nok heller bruge Oracl's egne drivere.
Jep, men IKVM er ægte .NET XCOPY deploy,ent d.v.s. det er bare at kopiere .dll'erne ind i det rigtige dir - ingen installations program som retter i registry og alt muligt
Synes godt om
Slettet bruger
29. maj 2005 - 06:36#13
luk og hold points selv - det var jo ikke rigtigt nogen løsning ;)
Det skyldes at din .NET version ikke kan få adgang til oci.dll (og visse andre dll'er). Det du skal gøre er, at ændre ntfs permissions på din oracle_home\bin folder, og hvis det er asp.net der skal have adgang, så er det den bruger der er defineret i application pool der skal have read-access. Derefter skal du reboote - ved det lyder lamt - men det skal du altså. Min teori på hvorfor er, at oci.dll loades fra start af systemet, og lader til at beholde permissions fra startup indtil reboot :(
Anyways, dette skulle være løsningen - og hvis det ikke hjælper, så giv lyd :)
Og så kan du bare bruge System.Data.OracleClient (efter du har installeret en OracleClient på maskinen).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.