Avatar billede jakobverner Nybegynder
03. maj 2005 - 15:32 Der er 15 kommentarer og
1 løsning

Dataset med data skal sendes fra webservice?

Jeg har en webservice der selecter i en accessdatabase og lægger det selectede ind i et dataset, derefter skal webservicen sende datasetet til en webservice-consumer.
Men når eksekverer programmet og aktivere/invoker webservicen så får jeg denne besked: "System.Data.OleDb.OleDbException: Microsoft Jet-databasemotoren kan ikke åbne filen "C:\Documents and Settings\Administrator\Dokumenter\test.mdb". Den er allerede åbnet med udelt adgang af en anden bruger, eller du skal have tilladelse til at vise dataene."

Hvordan får jeg sendt datasetet med indholdet?
Koderne ser således ud:

[WebMethod]
public DataSet HelloWorld()
{
    try
    {
        oleDbConnection1.Open();
    }
    catch (Exception b){Console.WriteLine(b);}
    try
    {               
        oleDbDataAdapter1.Update(dataSet11);
    }
    catch (Exception c){Console.WriteLine(c);}
    try
    {
        oleDbConnection1.Close();   
    }
    catch (Exception d){Console.WriteLine(d);}
               
    oleDbDataAdapter1.SelectCommand.CommandText =
        "SELECT Temp, Tidspunkt FROM temptabel WHERE (Temp < 22) ORDER BY Temp";
               
    oleDbDataAdapter1.Fill(dataSet11, "temptabel");
    return dataSet11;
}

Jeg kan fint få adgang til databasen fra en anden programstump jeg har lavet, men den programstump skal heller ikke sende dataen nogen steder hen!
Avatar billede arne_v Ekspert
03. maj 2005 - 15:45 #1
Umiddelbart lyder det som at ASP.NET brugernavnet ikke har adgang til MDB filen.
Avatar billede arne_v Ekspert
03. maj 2005 - 15:45 #2
Jeg er iøvrigt meget skeptisk overfor ideen om at bruge et DataSet objekt
i en web service. Remoting lyder bedre.
Avatar billede jakobverner Nybegynder
03. maj 2005 - 16:15 #3
Kommentar 1:
Hvordan ændre jeg det der med brugernavnet ikke har adgang til MDB-filen... og hvad vil det egentlig sige? :)

Koammentar 2:
Da programmet er til en skoleopgave, hvor jeg har formuleret at jeg ville udfører opgaven med en webservice, så skal programmet udføres som en webservice (hver enten det er smart eller ej). Men dataen der skal sendes behøver nødvendigvis ikke at være gemt i et dataset. Det vigtigste er bare at det selectede kommer frem til webservice-consumeren. Det kunne være rart med et kodeforslag, evt. med alternativt forslag? At tilføje er at jeg ikke er specielt skarp til c#.net.
Avatar billede arne_v Ekspert
03. maj 2005 - 17:06 #4
Din web service kører under ASP.NET og den process har naturligvis et
brugernavn tilknyttet. Hvis ikke det brugernavn har adgang til MDB filen så ...
Avatar billede arne_v Ekspert
03. maj 2005 - 17:06 #5
simpelt array af struct er mere portabelt
Avatar billede jakobverner Nybegynder
03. maj 2005 - 17:46 #6
Kommentar 1:
Hvis det er tilfældet hvordan tilknytter jeg så et brugernavn til webservicen så den for adgang til MDB?

Kommentar 2:
Vil det sige jeg i stedet for at udtrække data til et dataset og sende datasetet til en webservice-consumer skal udtrække data til et array og sende arrayet til en webservice-consumer?
Avatar billede arne_v Ekspert
03. maj 2005 - 18:26 #7
Normalt giver man ASP.NET brugernavnet adgang til MDB filen (tror jeg nok - den slags
er ikke mit ekspertise område)
Avatar billede arne_v Ekspert
03. maj 2005 - 18:28 #8
Ja.

Du betaler en høj pris for at konvertere binær->XML->binær. Fordelen er at
formatet er teknologi uafhængigt. Men hvis du bruger en .NET specifik data type,
så er der ingen fordel.

Derfor enten web service med generelle data typer eller remoting med .NET
specofikke data typer (remotong over TCP sender binære seriliaserede objekter hvilket
er meget hurtigere end XML).
Avatar billede jakobverner Nybegynder
03. maj 2005 - 18:46 #9
Vil du give mig et kodet eksempel på hvordan man trækker data ud fra en database til et array? evt. ligge koden som et svar
Avatar billede arne_v Ekspert
03. maj 2005 - 18:51 #10
Jeg prøver lige at bikse et eksempel.
Avatar billede arne_v Ekspert
03. maj 2005 - 19:31 #11
using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;

namespace E
{
    [Serializable]
    public class Rec
    {
        private int f1;
        private string f2;
        public Rec() : this(0, "")
        {
        }
        public Rec(int f1, string f2)
        {
            this.f1 = f1;
            this.f2 = f2;
        }
        public int F1
        {
            get
            {
                return f1;
            }
            set
            {
                f1 = value;
            }
        }
        public string F2
        {
            get
            {
                return f2;
            }
            set
            {
                f2 = value;
            }
        }
    }
    public class DataGateway
    {
        [WebMethod]
        public Rec[] GetAll()
        {
            SqlConnection con = new SqlConnection("server=ARNEPC3;Integrated Security=SSPI;database=Test");
            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT F1,F2 FROM T1", con);
            ArrayList list = new ArrayList();
            SqlDataReader rdr = cmd.ExecuteReader();
            while(rdr.Read())
            {
                list.Add(new Rec((int)rdr[0], (string)rdr[1]));
            }
            rdr.Close();
            con.Close();
            Rec[] res = (Rec[])list.ToArray(typeof(Rec));
            return res;
        }
    }
}
Avatar billede arne_v Ekspert
03. maj 2005 - 19:31 #12
<%@ WebService Language="C#" Class="E.DataGateway" %>
Avatar billede arne_v Ekspert
03. maj 2005 - 19:31 #13
using System;

class Test
{
    public static void Main(string[] args)
    {
        DataGateway gate = new DataGateway();
        Rec[] res = gate.GetAll();
    for(int i = 0; i < res.Length; i++)
    {
            Console.WriteLine(res[i].F1 + " " + res[i].F2);
        }
    }
}
Avatar billede arne_v Ekspert
03. maj 2005 - 19:32 #14
og et svar
Avatar billede arne_v Ekspert
03. maj 2005 - 19:46 #15
Og hele pointen med web service er at den kan kaldes fra andre sprog.

Ovenstående test program i Java ser ud som:

import org.tempuri.*;

public class Test {
    public static void main(String[] args) throws Exception {
        DataGatewayLocator loc = new DataGatewayLocator();
        DataGatewaySoap gate = loc.getDataGatewaySoap();
        Rec[] res = gate.getAll().getRec();
        for(int i = 0; i < res.length; i++) {
            System.out.println(res[i].getF1() + " " + res[i].getF2());
        }
    }
}
Avatar billede jakobverner Nybegynder
03. maj 2005 - 22:53 #16
:) Tusind tak for hjælpen
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