Avatar billede jesperthomsen1980 Nybegynder
23. september 2005 - 13:01 Der er 12 kommentarer og
1 løsning

Hvordan får jeg følgende smidt i et dataset eller i en database?

Hej eksperter
På min vej til at hente valutakurser ind i mit VB.net program, er jeg kommet frem til følgende:
http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml
Hvordan kommer jeg så herfra?
Har udviklet et program uden brug af XML overhovedet, så jeg aner ikke rigtigt hvordan jeg skal fortsætte!
HAr ikke sat mig videre ind i xml, da det på nuværende tidspunkt ikke er noget jeg kommer til at bruge. Starter lige med Vb, og så må xml komme på et senere tidspunkt.
Håber nogen kan hjælpe mig videre...
Avatar billede necro655 Nybegynder
23. september 2005 - 13:44 #1
jeg har ganske vist lavet det i C#

men håber du kan bruge det.

jeg indlæser xml filen fra det andet sitet.og gemmer den på min egen harddisk.

du kan evt loaded det ind i et xml object hvis du ønsker :)

husk at include

using System.IO;
using System.Net;
using System.Text;



StringBuilder sb  = new StringBuilder();

            byte[]        buf = new byte[8192];

           

            HttpWebRequest  request  = (HttpWebRequest)WebRequest.Create("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream resStream = response.GetResponseStream();

            string tempString = null;
            int    count      = 0;
            do
            {

   
                count = resStream.Read(buf, 0, buf.Length);

               
                if (count != 0)
                {
                   
                    tempString = Encoding.ASCII.GetString(buf, 0, count);
                    sb.Append(tempString);
                   
                }
            }
            while (count > 0);
            System.IO.StreamWriter of = new StreamWriter(@"c:\aaa\valuta.xml");
            of.WriteLine(sb.ToString());
            of.Close();
Avatar billede jesperthomsen1980 Nybegynder
23. september 2005 - 14:24 #2
Er heller ikke så meget inde i C#, så jeg har lavet det om til vb.net
Gode nok melder en fejl i do lykken, så det er jeg lige ved at kigge på...

Det er koden:
Dim sb As StringBuilder = New StringBuilder
Dim buf(8192) As Byte
Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml"), HttpWebRequest)
Dim response As HttpWebResponse = CType(request.GetResponse, HttpWebResponse)
Dim resStream As Stream = response.GetResponseStream
Dim tempString As String = Nothing
Dim count As Integer = 0
Do
count = resStream.Read(buf, 0, buf.Length)
If Not (count = 0) Then
  tempString = Encoding.ASCII.GetString(buf, 0, count)
  sb.Append(tempString)
End If
Loop While count > 0
Dim of As System.IO.StreamWriter = New StreamWriter("c:\aaa\valuta.xml")
of.WriteLine(sb.ToString)
of.Close
Avatar billede jesperthomsen1980 Nybegynder
23. september 2005 - 14:33 #3
Det er count og tempstring den ikke er vild med....
Avatar billede jesperthomsen1980 Nybegynder
23. september 2005 - 14:59 #4
Jeg har fået fejlene væk, på nær én som kommer ved runtime! Har lidt svært ved at rette den, da jeg ikke er helt med på nedenstående kode:
while (count > 0);
      System.IO.StreamWriter of = new StreamWriter("c:\aaa\valuta.xml");
      of.WriteLine(sb.ToString());
      of.Close();
Avatar billede jesperthomsen1980 Nybegynder
23. september 2005 - 15:09 #5
ok - det kunne måske hjælpe på det at oprette en mappe:-)

Men hvordan kan man så læse de forskellige valuter i en xml fil?
Avatar billede arne_v Ekspert
23. september 2005 - 18:29 #6
prøv lige følgende:

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace E
{
    public class MainForm : Form
    {
        private DataGrid dataGrid1;
        public MainForm()
        {
            InitializeComponent();
        }
       
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }
       
        private void InitializeComponent() {
            dataGrid1 = new DataGrid();
            ((System.ComponentModel.ISupportInitialize)(dataGrid1)).BeginInit();
            SuspendLayout();
            DataSet ds = new DataSet();
            ds.ReadXml("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
            dataGrid1.DataSource = ds.Tables["currency"];
            dataGrid1.HeaderForeColor = SystemColors.ControlText;
            dataGrid1.Location = new Point(50, 50);
            dataGrid1.Size = new Size(400, 600);
            ClientSize = new Size(500, 700);
            Controls.Add(dataGrid1);
            Text = "Demo";
            ((System.ComponentModel.ISupportInitialize)(dataGrid1)).EndInit();
            ResumeLayout(false);
        }
    }
}
Avatar billede arne_v Ekspert
23. september 2005 - 18:30 #7
hov du skulle have den i VB.NET:

Imports System
Imports System.Data
Imports System.Drawing
Imports System.Windows.Forms

Namespace E
    Public Class MainForm
    Inherits Form
        Private dataGrid1 As DataGrid

        Public Sub New()
            InitializeComponent
        End Sub

        <STAThread()> _
        Public Shared Sub Main(ByVal args As String())
            Application.Run(New MainForm)
        End Sub

        Private Sub InitializeComponent()
            dataGrid1 = New DataGrid
            CType((dataGrid1), System.ComponentModel.ISupportInitialize).BeginInit
            SuspendLayout
            Dim ds As DataSet = New DataSet
            ds.ReadXml("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml")
            dataGrid1.DataSource = ds.Tables("currency")
            dataGrid1.HeaderForeColor = SystemColors.ControlText
            dataGrid1.Location = New Point(50, 50)
            dataGrid1.Size = New Size(400, 600)
            ClientSize = New Size(500, 700)
            Controls.Add(dataGrid1)
            Text = "Demo"
            CType((dataGrid1), System.ComponentModel.ISupportInitialize).EndInit
            ResumeLayout(False)
        End Sub
    End Class
End Namespace
Avatar billede jesperthomsen1980 Nybegynder
24. september 2005 - 01:03 #8
Er lige kommet hjem fra arbejde, så jeg får ikke kigget på det nu, men jeg bliver dælme glad i morgen hvis det virker;-)
Har brugt meget lang tid på at få det til at gøre som jeg gerne vil...
Umiddelbart ser koden rimelig simpel ud, og jeg har været i den rigtige retning...
Men tak for det, og jeg vender tilbage i morgen....
Avatar billede jesperthomsen1980 Nybegynder
24. september 2005 - 09:07 #9
Tak for hjælpen til jer begge, men Arne har lige det svar jeg søgte, så derfor vil jeg tillade mig at tildele alle point til ham.
Smid lige et svar Arne!
Avatar billede arne_v Ekspert
24. september 2005 - 10:11 #10
ok
Avatar billede jesperthomsen1980 Nybegynder
24. september 2005 - 17:19 #11
Kan man egentlig regne med at decimalerne fra nationalbankens xml side?
På nogle af valuterne er der én decimal, mens der på andre er tre!
Det er fordi jeg bruger denne til at hente dem fra datasettet:
dsrate = CType(ds.Tables("currency").Rows(start1)(2), Decimal)
                If dscode = "EUR" Then
                    datasetid = 4
                    dsrate = dsrate * 0.01
                    data.updatevaluta(datasetid, dsrate)
end if
Avatar billede jesperthomsen1980 Nybegynder
24. september 2005 - 17:20 #12
For dem jeg henter er der to decimaler, og det gør at jeg må dividere med 100 da dsrate bliver et helt tal. Tror det er pga det punktum de bruger i stedet for komma!
Avatar billede arne_v Ekspert
24. september 2005 - 17:26 #13
prøv at sætte din culture til english og se om det hjælper
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
Kurser inden for grundlæggende programmering

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