Avatar billede mmbn Nybegynder
23. oktober 2005 - 12:23 Der er 28 kommentarer og
1 løsning

oracle spørgsmål i forbindelse med windows applikation

to spøgsmål:
1:hvis jeg vil indsætte en meget lang rtf streng i et long felt får jeg følgende fejl: ora-0704:string litteral to long. kan dette undgås?
2: jeg er ved at hente "Oracle10g Data Provider for .NET 10.1.0.4.0 and ODAC " for at kunne bruge GetOracleClobForUpdate metoden. vil dette kunne løse ovenstående problem? og hvad sker der hvis jeg installerer denne driver på min maskine og derefter vil køre programmet på en anden maskine?

Eller kan jeg løse spm 1 ved kun at bruge using System.Data.OracleClient; namespacet?
Avatar billede mmbn Nybegynder
23. oktober 2005 - 12:28 #1
grunden til spm 2 var at jeg har set oracles eget eksempel:
// create an OracleConnection object to connect to the
    // database and open the connection
    OracleConnection myOracleConnection =
      new OracleConnection(
        "User Id=lob_user;Password=lob_password"
      );
    myOracleConnection.Open();

    // create an OracleCommand object to hold a SQL statement
    OracleCommand myOracleCommand = myOracleConnection.CreateCommand();

    // step 1: create an OracleTransaction object
    OracleTransaction myOracleTransaction =
      myOracleConnection.BeginTransaction();

    // step 2: read the row
    myOracleCommand.CommandText =
      "SELECT id, clob_column " +
      "FROM clob_content " +
      "WHERE id = 1";
    OracleDataReader myOracleDataReader =
      myOracleCommand.ExecuteReader();
    myOracleDataReader.Read();

    Console.WriteLine("myOracleDataReader[\"id\"] = " +
      myOracleDataReader["id"]);

    // step 3: get the LOB locator
    OracleClob myOracleClob =
      myOracleDataReader.GetOracleClobForUpdate(1);

    // step 4: write to the LOB
    myOracleClob.Erase();
    string text = "It is the east, and Juliet is the Sun";
    char [] charArray = text.ToCharArray();
    myOracleClob.Write(charArray, 0, charArray.Length);
    Console.WriteLine("myOracleClob.Value = " + myOracleClob.Value);

    // step 5: commit the transaction
    myOracleTransaction.Commit();
    Console.WriteLine("Successfully committed transaction");

    // close the OracleDataReader and the OracleConnection object
    myOracleDataReader.Close();
    myOracleConnection.Close();

    Console.WriteLine("\nPress any key to end");
    Console.ReadLine();
Avatar billede mmbn Nybegynder
23. oktober 2005 - 12:29 #2
Avatar billede arne_v Ekspert
23. oktober 2005 - 14:40 #3
Avatar billede mmbn Nybegynder
23. oktober 2005 - 14:46 #4
god side. er CLOB kun integreret i Oracle.DataAccess og ikke i system.data.oracleclient?
Avatar billede arne_v Ekspert
23. oktober 2005 - 14:47 #5
så vidt jeg kan se er CLOB med i den system.data.oracleclient som kommer
med .NET

jeg sidder faktisk og tester lidt på det lige nu
Avatar billede mmbn Nybegynder
23. oktober 2005 - 14:48 #6
synes ikke jeg kunne finde den
kun LOB
Avatar billede mmbn Nybegynder
23. oktober 2005 - 14:51 #8
har været inde og se på dit forslag dr_chaos
Avatar billede arne_v Ekspert
23. oktober 2005 - 14:51 #9
Den her kode virker hos mig:

            OracleCommand ins = new OracleCommand("INSERT INTO trtf (id,rtf) VALUES(:id,:rtf)", con);
            ins.Parameters.Add("id", OracleType.Int32);
            ins.Parameters.Add("rtf", OracleType.Clob);
            ins.Parameters["id"].Value = 1;
            ins.Parameters["rtf"].Value = "Dette er en kort streng";
            ins.ExecuteNonQuery();
            String big = "";
            for(int i = 0; i < 10000; i++)
            {
                big = big + "Dette en en del af en lang streng.";
            }
            ins.Parameters["id"].Value = 2;
            ins.Parameters["rtf"].Value = big;
            ins.ExecuteNonQuery();
            OracleCommand sel = new OracleCommand("SELECT rtf FROM trtf", con);
            OracleDataReader rdr = sel.ExecuteReader();
            while(rdr.Read())
            {
                Console.WriteLine(rdr[0]);
            }
            rdr.Close();
Avatar billede arne_v Ekspert
23. oktober 2005 - 14:52 #10
det er så 340 KB
Avatar billede mmbn Nybegynder
23. oktober 2005 - 14:53 #11
og det er med system.data.oracleclient namespacet?
Avatar billede arne_v Ekspert
23. oktober 2005 - 14:55 #12
ja

.NET 1.1 out of the box
Avatar billede mmbn Nybegynder
23. oktober 2005 - 14:55 #13
et sidespørgsmål: Kan man konvertere et jpg billede til rtf uden at bruge RIchTextBox kontrollen
Avatar billede mmbn Nybegynder
23. oktober 2005 - 14:55 #14
prøver lige dit forslag arne
Avatar billede arne_v Ekspert
23. oktober 2005 - 14:57 #15
OracleCommand ins = new OracleCommand("INSERT INTO trtf (id,rtf) VALUES(:id,:rtf)", con);
            ins.Parameters.Add("id", OracleType.Int32);
            ins.Parameters.Add("rtf", OracleType.Clob);
            ins.Parameters["id"].Value = 1;
            ins.Parameters["rtf"].Value = "Dette er en kort streng";
            ins.ExecuteNonQuery();
            StringBuilder big = new StringBuilder();
            for(int i = 0; i < 100000; i++)
            {
                big.Append("Dette en en del af en lang streng.");
            }
            ins.Parameters["id"].Value = 2;
            ins.Parameters["rtf"].Value = big.ToString();
            ins.ExecuteNonQuery();
            OracleCommand sel = new OracleCommand("SELECT rtf FROM trtf", con);
            OracleDataReader rdr = sel.ExecuteReader();
            while(rdr.Read())
            {
                Console.WriteLine(rdr[0]);
            }
            rdr.Close();

klarer 3.4 MB (jeg måtte lige skifte fra String til StringBuilder for ikke at dø på den append)
Avatar billede arne_v Ekspert
23. oktober 2005 - 14:58 #16
Ingen anelse om hvordan man kan konvertere JPEG til RTF !

(hvorfor konverter den til RTF ?)
Avatar billede mmbn Nybegynder
23. oktober 2005 - 15:01 #17
det er krav til opgaven. der ligge nogle oplysninger (noget tekst) gemt i et long felt i en oracle database som rtf. jeg skal give muligeheden for at kunne tilføje et .jpg billede til den tekst i det givne felt. De vil gerne have billedet gemt i basen med teksten som rtf
Avatar billede mmbn Nybegynder
23. oktober 2005 - 15:10 #18
jeg skal bruge den i en update metode
cmd = new OracleCommand("UPDATE ADVIS_TABLE SET A_RTF=':ADVIS'"+
                        " WHERE A_RTF_ID='" + strID + "'",conn);
                    cmd.Parameters.Add("ADVIS",OracleType.Clob);
                    cmd.Parameters["ADVIS"].Value = AdvisRTF;
                    cmd.ExecuteNonQuery();

tabellen består af
A_ID number
A_RTF_ID varchar som er et unikt navn
A_RTF som er den rtf streng der skal manipuleres

ved ovenstående metode fejler den
Avatar billede mmbn Nybegynder
23. oktober 2005 - 15:16 #19
hov - fjernede lige " ' " foran og efter parametren - så viker det :) smid et svar
Avatar billede arne_v Ekspert
23. oktober 2005 - 16:56 #20
svar
Avatar billede arne_v Ekspert
23. oktober 2005 - 16:56 #21
når du har angiver typen så kan den godt selv finde ud af at sætte  '' omkring
Avatar billede arne_v Ekspert
23. oktober 2005 - 16:57 #22
bemærk at det er den tredie metode fra bloggen som vistnok er den anbefalede - det
er bare noget besværligt  ...
Avatar billede mmbn Nybegynder
23. oktober 2005 - 18:16 #23
takker atter engang for hjælpen bruger din ide dog. den svarer til anden metode som trods alt er hurtigere end den første metode
Avatar billede mmbn Nybegynder
23. oktober 2005 - 18:20 #24
Hvad er det der gøt den tredje metode bedre? Hvad giver det at bruge en Oracletransaction?
Avatar billede arne_v Ekspert
23. oktober 2005 - 18:25 #25
jeg tror at transaktionen er ligegyldig

det er nok dbms_lob.createtemporary som er det essentielle i løsningen
Avatar billede mmbn Nybegynder
23. oktober 2005 - 18:41 #26
hvad beryde det og kan laves hvis det er et long felt? eksempelvis tidlieger version af oracle?
Avatar billede mmbn Nybegynder
23. oktober 2005 - 18:54 #27
betyder og tidligere..
Avatar billede arne_v Ekspert
23. oktober 2005 - 19:19 #28
ved jeg ikke nok om Oracle til at kunne svare

jeg har testet på en 9i

kan du risikere at skulle køre det mod en 8i ?
Avatar billede mmbn Nybegynder
24. oktober 2005 - 11:32 #29
forholdsvist sikkert
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Capgemini Danmark A/S

Open Application (Denmark)

Politiets Efterretningstjeneste

AI/ML udvikler i PET

Capgemini Danmark A/S

Finance Lead (SAP)