Avatar billede joemoz Nybegynder
08. oktober 2007 - 18:25 Der er 12 kommentarer og
1 løsning

Generere Dataset

Jeg har brug for at generere et dataset til at sende videre til en webservice vha. en VB-applikation. Data ligger som udgangspunkt i en kommasepareret fil, men skal vel omdannes til xml og hentes ind? Hvordan gør jeg det?
Avatar billede nielle Nybegynder
08. oktober 2007 - 18:54 #1
Er det VB6 eller VB.NET ?
Avatar billede joemoz Nybegynder
08. oktober 2007 - 22:38 #2
Visual Basic 2005
Avatar billede nielle Nybegynder
08. oktober 2007 - 22:52 #3
Denne kategori er til VB6 og tidligere. Til en anden god gang bør du placere dine VB.Net spørgmål her:

http://www.eksperten.dk/spm/Programmering/Visual-Basic-NET/

Du behøver nu ikke at lukke dette her spørgsmål - lad os bare gøre den færdig her. :^)
Avatar billede nielle Nybegynder
08. oktober 2007 - 23:28 #4
Noget i denne stil?

    <WebMethod()> _
    Public Function DinFuntion() As System.Data.DataSet
        Dim csvPath As String = Server.MapPath("e800069.csv")

        Dim myDataSet As System.Data.DataSet = New System.Data.DataSet()

        Dim myDataTable As System.Data.DataTable = New System.Data.DataTable("dinTabel")

        Dim myDataColumn As System.Data.DataColumn

        ' 1. kolonne
        myDataColumn = New System.Data.DataColumn("dinKolonne1")
        myDataColumn.DataType = System.Type.GetType("System.String")
        myDataTable.Columns.Add(myDataColumn)

        ' 2. kolonne
        myDataColumn = New System.Data.DataColumn("dinKolonne2")
        myDataColumn.DataType = System.Type.GetType("System.Int32")
        myDataTable.Columns.Add(myDataColumn)

        Using sr As System.IO.StreamReader = New System.IO.StreamReader(csvPath)
            Dim line As String

            Do
                line = sr.ReadLine()
                Dim lineArr As String() = line.Split(",")

                Dim myDataRow As System.Data.DataRow = myDataTable.NewRow()
                myDataRow("dinKolonne1") = lineArr(0)
                myDataRow("dinKolonne2") = lineArr(1)
                myDataTable.Rows.Add(myDataRow)
            Loop Until Not line Is Nothing

        End Using

        myDataSet.Tables.Add(myDataTable)

        DinFuntion = myDataSet
    End Function
Avatar billede joemoz Nybegynder
09. oktober 2007 - 00:29 #5
Mange tak, men lige et par spørgsmål:

Jeg har et program der ser sådan her ud foreløbig:

"Imports WindowsApplication1.dk.xxx

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Visible = False

        Dim myservice As New XXX_ListFunctions()
        myservice.XXX_BulkUpdate("wsXXX-Newsletter", "xxx", DATASET)
    End Sub
End Class"

Hvor skal jeg indsætte din kode? Og kræver henvisningen til kolonner at der er en forklaringslinje med kolonnetitler i toppen af den kommaseparerede fil?
Avatar billede nielle Nybegynder
09. oktober 2007 - 07:02 #6
Oh, jeg kom vist til at læse dit spørgsmål "den anden vej rundt" som i "hvordan laver jeg et datasæt som jeg sender *fra* en webservice".

Den centrale kode er dog (stort set) den samme:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim myDataSet As System.Data.DataSet = DinFuntion()

        Me.Visible = False

        Dim myservice As New XXX_ListFunctions()
        myservice.XXX_BulkUpdate("wsXXX-Newsletter", "xxx", myDataSet)
    End Sub

    Public Function DinFuntion() As System.Data.DataSet
        Dim csvPath As String = "C:\\sti\\til\\din\\fil\\e800069.csv"

        Dim myDataSet As System.Data.DataSet = New System.Data.DataSet()

        Dim myDataTable As System.Data.DataTable = New System.Data.DataTable("dinTabel")

        Dim myDataColumn As System.Data.DataColumn

        ' 1. kolonne
        myDataColumn = New System.Data.DataColumn("dinKolonne1")
        myDataColumn.DataType = System.Type.GetType("System.String")
        myDataTable.Columns.Add(myDataColumn)

        ' 2. kolonne
        myDataColumn = New System.Data.DataColumn("dinKolonne2")
        myDataColumn.DataType = System.Type.GetType("System.Int32")
        myDataTable.Columns.Add(myDataColumn)

        Using sr As System.IO.StreamReader = New System.IO.StreamReader(csvPath)
            Dim line As String

            Do
                line = sr.ReadLine()
                Dim lineArr As String() = line.Split(",")

                Dim myDataRow As System.Data.DataRow = myDataTable.NewRow()
                myDataRow("dinKolonne1") = lineArr(0)
                myDataRow("dinKolonne2") = lineArr(1)
                myDataTable.Rows.Add(myDataRow)
            Loop Until Not line Is Nothing

        End Using

        myDataSet.Tables.Add(myDataTable)

        DinFuntion = myDataSet
    End Function
Avatar billede joemoz Nybegynder
09. oktober 2007 - 08:51 #7
Tak, men den siger: "Input string was not in a correct format. Couldn't store <KOLONNE2> in KOLONNE2 Column. Expected type is INT32. 

(I linjen "mydatarow("KOLONNE2") = lineArr(1).

Er der nogen særlige krav til hvordan den kommaseparerede fil ser ud?

Jeg har lavet en test hvor den har følgende udseende:

KOLONNE1, KOLONNE2
A,B
C,D
Avatar billede nielle Nybegynder
09. oktober 2007 - 09:34 #8
Det er nok fordi at jeg har erklæret kolonne2 som en Int32 (Integer):

myDataColumn.DataType = System.Type.GetType("System.Int32")

Derfor skal den nok også parses først:

myDataRow("dinKolonne2") = Int32.Parse(lineArr(1))



MEN de valgte typer for kolonnerne er jo blot eksempler - du skal bruge noget som stemmer sammen med hvad du rent faktisk har i din csv.
Avatar billede joemoz Nybegynder
09. oktober 2007 - 10:07 #9
Jep - det opdagede jeg også.

Tja, nu kan jeg gennemføre programmet uden fejl, men jeg får ikke rigtig nogen respons fra webservicen - burde jeg ikke det, og hvor kan jeg se den?
Avatar billede joemoz Nybegynder
09. oktober 2007 - 10:07 #10
Tak for hjælpen i øvrigt - drop lige et svar.
Avatar billede nielle Nybegynder
09. oktober 2007 - 10:13 #11
Jeg gætter på at dit dataset skal være formateret på en eller anden speciel måde før at webservicen kan bruge den til noget?

Mht. om webservicen fejler eller ej, så tror jeg nok at det første jeg ville tjekke var om XXX_BulkUpdate() returnere en værdi som siger noget om hvorvidt tingene gik godt elelr ej.

Hvis den ikke gør det, så ville jeg dernæst kigge efter om der var et kald man kunne sende til webservicen for at få en eventuel fejlkode at vide.

Endeligt ville jeg tjekke efter på webserveren - men det kræver selvfølgelig at der er adgang til denne.


... og et svar :^)
Avatar billede joemoz Nybegynder
09. oktober 2007 - 10:24 #12
Tak - men hvis XXX_BulkUpdate() returnerer en værdi, hvor kan jeg så se den henne?

Kan du i øvrigt forklare hvorfor 'Form1' bliver vist selvom jeg har sat den til me.visible=false
Avatar billede nielle Nybegynder
09. oktober 2007 - 12:53 #13
Nu ved jeg ikke lige hvilken type, men det kunne være et bud at den returnerede en int (det finder du sikkeret ud af ved at holde musen over koden):


Dim errCode As Integer = myservice.XXX_BulkUpdate("wsXXX-Newsletter", "xxx", myDataSet)

If (errCode <> 0) Then
        MessageBox.Show("FEJL")
End If
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