Avatar billede forceprogrammer Nybegynder
27. januar 2005 - 20:26 Der er 6 kommentarer

problemer med opdatering af databasen

Jeg har en insert query jeg skal eksekvere fra min asp.net applikation. Basen jeg kører på er en oracle.

Min insert-query ser således ud:

INSERT INTO TA_STED
                      (STED_NR, STED_ID, STED_NAVN, STED_SYNONYM, STED_ADRESSE, TELEFON, MOBIL_TEL, EMAIL, KONTAKT_PERSON, POSTNR, AKTIV_KODE,
                      DB_ID, SEQ_ID, FAX, KUNDE_NR, BEMAERK)
VALUES    (SA_STED.NEXTVAL, SA_STED.NEXTVAL, 'txtNavn', 'txtSynonym', 'txtAdresse', 'txtTelefon', 'txtMobil', 'txtEmail', 'txtKontaktPerson', 'txtPostNr', 'j', 0,
                      SA_STED.NEXTVAL, 'txtfaxNr', 502, ' txtBemaerk ')


Hvis jeg eksekverer den fra dotnets commandbuilder virker den perfekt. Hvis jeg derimod eksekverer den fra min applikation får jeg følgende virkeligt dårligt beskrevet fejlmeddelse:

ORA-01722: invalid number

Jeg aner ikke hvorfor det ikke virker fra asp.net applikationen når det gør fra commandbuilderen.

I asp.net applikationen gør jeg brug af parameters til at indsætte værdierne i SQL-strengen.
Følgende kode bruger jeg til at oprette parametrene:

            System.Collections.Hashtable table=new System.Collections.Hashtable();

            table.Add("txtfaxNr",txtfaxNr.Text);
            table.Add("txtSynonym",txtSynonym.Text);
            table.Add("txtNavn",txtNavn.Text);
            table.Add("txtAdresse",txtAdresse.Text);
            table.Add("txtTelefon",txtTelefon.Text);
            table.Add("txtEmail",txtEmail.Text);
            table.Add("txtMobil",txtMobil.Text);
            table.Add("txtKontaktPerson",txtKontaktPerson.Text);
            table.Add("txtPostNr",txtPostNr.Text);
            table.Add("txtBemaerk",txtBemaerk.Text);
            table.Add("kundenr",502);

------------------------


            genericDAL.addParameter("txtNavn",System.Data.DbType.String,tabel["txtNavn"].ToString());
            genericDAL.addParameter("txtSynonym",System.Data.DbType.String,tabel["txtSynonym"].ToString());
            genericDAL.addParameter("txtAdresse",System.Data.DbType.String,tabel["txtAdresse"].ToString());
            genericDAL.addParameter("txtTelefon",System.Data.DbType.String,tabel["txtTelefon"].ToString());
            genericDAL.addParameter("txtMobil",System.Data.DbType.String,tabel["txtMobil"].ToString());
            genericDAL.addParameter("txtEmail",System.Data.DbType.String,tabel["txtEmail"].ToString());
            genericDAL.addParameter("txtKontaktPerson",System.Data.DbType.String,tabel["txtKontaktPerson"].ToString());
            genericDAL.addParameter("txtPostNr",System.Data.DbType.String,tabel["txtPostNr"].ToString());
            genericDAL.addParameter("txtfaxNr",System.Data.DbType.String,tabel["txtfaxNr"].ToString());
            genericDAL.addParameter("txtBemaerk",System.Data.DbType.String,tabel["txtBemaerk"].ToString());
            genericDAL.addParameter("kundenr",System.Data.DbType.Int32,tabel["kundenr"].ToString());
           
            string SQL=
            " INSERT INTO"+
            " TA_STED  ("+
                    "STED_NR,STED_ID,STED_NAVN,"+
                    "STED_SYNONYM,STED_ADRESSE,TELEFON,"+
                    "MOBIL_TEL,EMAIL,KONTAKT_PERSON,"+
                    "POSTNR,AKTIV_KODE,DB_ID,"+
                    "SEQ_ID,FAX,KUNDE_NR,BEMAERK)"+
            " VALUES    ("+
                    "SA_STED.NEXTVAL,SA_STED.NEXTVAL,:txtNavn,"+
                    ":txtSynonym,:txtAdresse,:txtTelefon,"+
                    ":txtMobil,:txtEmail,:txtKontaktPerson,"+
                    ":txtPostNr,'j',0,SA_STED.NEXTVAL,"+
                    ":txtfaxNr,:kundenr,:txtBemaerk)";
            genericDAL.insert(SQL,System.Data.CommandType.Text);

----------------------------------

public override void addParameter(string name,System.Data.DbType dbType,object dbValue)
        {
            createCommandSet();
           
            Oracle.DataAccess.Client.OracleParameter param = new Oracle.DataAccess.Client.OracleParameter();
            param.DbType=dbType;
            param.ParameterName=name;
            param.Value=dbValue;
            objCmd.Parameters.Add(param);
        }

------------------------------

public override void insert(string commandtext,System.Data.CommandType commandtype)
        {
            createCommandSet();
            objCmd.CommandType=commandtype;
            objCmd.CommandText=commandtext;
            objCmd.ExecuteNonQuery();
            destroyCommandSet();
        }

----------------------


protected override void createCommandSet()
        {
            if(objCmd==null)
            {
                objCmd=new OracleCommand();
                Oracle.DataAccess.Client.OracleConnection con=new OracleConnection(this.connectionString);
                con.Open();
                objCmd.Connection=con;
            }
        }



Det interresante ligger altså i insertSted og insert funktionerne. Det øverste er der hvor jeg undfanger data i præsentationslaget.

Jeg er lidt desperat. Mange hilsner
Avatar billede forceprogrammer Nybegynder
27. januar 2005 - 20:35 #1
det ser ud som om at hvis jeg ikke gør brug af parameters fungerer det fint.
Altså hvis jeg bare sætter data direkte ind i databasen.

Hvad er det jeg gør forkert med mine parameters?
Avatar billede arne_v Ekspert
27. januar 2005 - 21:45 #2
Nu har jeg aldrig brugt parameters mod Oracle (kun mod SQLServer og MySQL),
men i dem så angiver man parameter prefix i name.

Så du kan da lige prøve:

param.ParameterName=":"+name;
Avatar billede arne_v Ekspert
27. januar 2005 - 21:48 #3
Eller måske helt stryge de ":" da jeg ikke synes at Oracle client docs
bruger dem ...
Avatar billede forceprogrammer Nybegynder
27. januar 2005 - 21:49 #4
hmmm den kommer stadig med invalid number....
Avatar billede forceprogrammer Nybegynder
27. januar 2005 - 21:50 #5
med begge forslag
Avatar billede bitmax Nybegynder
17. januar 2006 - 09:42 #6
Prøv med kolon foran i dine values
INSERT INTO TA_STED (STED_NR, STED_ID, STED_NAVN)
VALUES    (SA_STED.NEXTVAL, SA_STED.NEXTVAL, :txtNavn)

genericDAL.addParameter("txtNavn",System.Data.DbType.String,tabel["txtNavn"].ToString());

Om dette er oracle specifikt ved jeg ikke..
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