Toon posts:

[ASP.NET]Hulp nodig bij programm

Pagina: 1
Acties:

Verwijderd

Topicstarter
Zoals in een vorig topic al gezegd geweest is heb ik danig problemen met een programma dat ik ontwikkeld had. Base-line: ik wou ssh gebruiken om SQL-query's uit te voeren en nu blijkt dat onmogelijk. De enige optie die ik dus nog zag/zie is ASP.NET gebruiken. Nu moet ik gelukkig (hopelijk) maar een paar dingetjes aanpassen om het programma alsnog volledig te laten werken.

Ik heb in een sneltreintempo (binnenkort examens, iedereen mag altijd voor mij duimen ;) en nadien moet het af) wat ASP.NET zitten leren zodat ik programma's kan maken.

Ik ben nu al in 1 puntje van mijn noden geslaagd: verbinden met de SQL-database en daaruit een recordcount terug krijgen. Nu zijn hier nog 2 problemen.

a. Ik kan de recordcount wel displayen maar ik zou die eigenlijk naar een txt moeten schrijven zodat ik er aan kan uit mijn origineel programma
b. Ik doe momenteel een recordcount op alles, maar eigenlijk zou ik een parameter willen meegeven bij het starten van het programma en daarop filteren in de recordcount. Hoe doe je dat in ASP.NET?

Dit is zeker niet uit luiheid, eerder uit noodzaak. Als jullie mij links verschaffen over het onderwerp waarnaar ik op zoek ben, wil ik uiteraard lezen, ik vraag dus geen volledige oplossing die ik gewoon moet plakken. Ik heb zelf Google en GoT al afgezocht maar het gaat echt niet vlot als je de termen niet kent.

Als iemand me met dit probleem kan helpen zou ik al aardig vooruit komen. Nadien resten me nog 2 problemen:

1. Alle results van een query in een txt plaatsen, telkens nieuwe regel voor nieuwe record
2. Een txt-file (lokaal) importeren in de SQL-server (niet lokaal)

Ik pak echter liever het probleem in fasen aan dus hulp voor de eerste 2 puntjes is momenteel al een hele hulp.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Leer het .NET framework, en ASP.NET; leer hoe je met een StreamWriter en een FileStream naar een file kunt schrijven, en leer ook iets over de QueryString in ASP.NET

Als je de gegevens uit je DB wilt halen, en beschikbaar stellen voor een ander programma, dan zet je deze beter niet in een txt file, maar in een XML file.

[ Voor 33% gewijzigd door whoami op 12-05-2004 13:56 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 12 mei 2004 @ 13:55:
Leer het .NET framework, en ASP.NET; leer hoe je met een StreamWriter en een FileStream naar een file kunt schrijven, en leer ook iets over de QueryString in ASP.NET

Als je de gegevens uit je DB wilt halen, en beschikbaar stellen voor een ander programma, dan zet je deze beter niet in een txt file, maar in een XML file.
OK hiermee geraakt ik al op weg. Ik ben er al in geslaagd de recordcount in een txt te steken. Nu nog proberen om dat ook met de hele dataset te doen. Het is makkelijker om naar xml out te putten, aleen is mijn origineel programma daar niet op voorzien en zou dat dus voor problemen zorgen. Ik moet echter enkel en alleen de records hebben en geen extra xml-tags...Denk dat ik daar nog een tijd mee bezig ben.

Heb je nog trefwoorden ivm paramaters die je meegeeft bij het opstarten? Dan ben ik wel al heel ver vooruit.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Een dataset heeft een WriteXml method.

Je andere applicatie kan je dan zodanig aanpassen dat ie dmv een XML DOM die file kan uitlezen.

QueryString, Request.QueryString

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 12 mei 2004 @ 14:48:
Een dataset heeft een WriteXml method.

Je andere applicatie kan je dan zodanig aanpassen dat ie dmv een XML DOM die file kan uitlezen.
Probleem is dat mijn andere applicatie niet in .NET geschreven is maar in C, wat volgens mij ni echt met XML overweg kan. Bovendien tracht ik met ASP.NET enkel de functionaliteit van plink te creëren. Vb:

Met plink ging ik een recordcount doen en laten outputten naar een txt. Dan krijg je
code:
1
2
count(*)
32


Ik heb nu die recordcount in ASP.NET zo laten outputten naar een txt dat ik exact hetzelfde krijg. Dan moet ik straks enkel in mijn originele applicatie plink vervangen door mijn exe dat ik nu aan het maken ben en moet ik verder niets aanpassen.

Verwijderd

Topicstarter
Ik ben nu bezig met het uitzoeken van die Request.QueryString maar dat blijkt enkel bruikbaar te zijn voor webpagina's. Ik ben echter bezig met een Windows Application en daarin wordt dit niet herkend. Een hintje nog :?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 14:07

mulder

ik spuug op het trottoir

Kleine hint: ASP.NET is om Webapplicaties te maken. Daarbij kun C# en Visual Basic.NET gebruiken. Waarmee je ook weer Windows applicaties kan maken!

Maar wat is nu precies de vraag/bedoeling dan?

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Don Facundo schreef op 12 mei 2004 @ 16:37:
Kleine hint: ASP.NET is om Webapplicaties te maken. Daarbij kun C# en Visual Basic.NET gebruiken. Waarmee je ook weer Windows applicaties kan maken!

Maar wat is nu precies de vraag/bedoeling dan?
Even de bedoeling/reden van deze programma's:

Ik moet een programma maken dat automatisch fotoboeken aanmaakt. Hiervoor had ik in C een programma geschreven. Dit programma ging dat op zijn beurt gebruik maken van plink om via SSH wat SQL-queries uit te voeren (vb: het opvragen van het aantal bestaande foto's in dat fotoboek, zodat verder genummerd wordt).
Het probleem bleek nu bij de provider te liggen, zij kunnen ons onmogelijk SSH aanbieden. Ik wil dus graag mijn programma (dat al af was) met zo weinig mogelijk aanpassingen toch doen werken.

Mijn idee is nu om alles dat ik eerst met plink wou doen te vervangen door zelfgeschreven programma's die hetzelfde doen, maar via internet ipv ssh. Omdat .NET geschikt is om verbinding te leggen met een MS SQL Server ging ik dat gaan gebruiken om tot het gewenste effect te komen.

Ik ben er nu al in geslaagd om een exe-programma te schrijven (dat ik dan makkelijk uit mijn c-programma kan aanroepen) dat alle mogelijke namen voor fotoboeken uit de database haalt en naar een txt schrijft. In mijn c-programma lees ik die txt dan weer in om te controleren of de naam die ik ingeef wel toegelaten is.

Nu moet ik nog uit mijn database een recordcount doen van alle foto's die beginnen met de naam van het fotoboek in kwestie. Hiervoor wil ik graag iets van de vorm 'nummering.exe fotoboeknaam' gebruiken. Dat geeft dan als resultaat weer een txt met de recordcount in.

Dat laatste is niet zo moeilijk. Ik weet alleen niet hoe ik die parameter 'fotoboeknaam' kan aanroepen in mijn programma om zo de correcte query uit te voeren. Daar zou ik dus graag een hint krijgen

Hopelijk is het wat duidelijker nu :)

Ideeën over hoe ik makkelijk een hele txt-file kan laten importen in de database zijn trouwens ook altijd welkom :*)

Verwijderd

Topicstarter
OK, even toevallig de ingeving gehad van de juiste term in C op te zoeken. In mijn boek kwam ik op 'command line argumenten' en als ik daarop zocht kwam ik tot het juiste commando. Dat is dus al opgelost.

Rest enkel nog: inserten van een txt via vb.net in MS SQL

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Verwijderd schreef op 12 mei 2004 @ 17:34:
Rest enkel nog: inserten van een txt via vb.net in MS SQL
Wat staat er in die txt, en waarom wil je hem als txt in je DB ?

MS SQL heeft een data-type text.
Lees je txt file in, gebruik daarvoor een StreamReader en FileStream en een stringbuilder.
Die stringbuilder heeft een ToString() method, als je je volledige file hebt ingelezen kan je dan gewoon dat boeltje inserten in SQL Server:

code:
1
2
3
4
5
6
7
8
while( MyStreamReader.Peek() != -1 )
{
    aStringBuilder.Append ( MyStreamReader.ReadLine());
}

MyCommand.Parameters["blaat"].Value = aStringBuilder.ToString();

MyCommand.ExecuteNonQuery();


Bovenstaande code is natuurlijk niet compleet, maar daarmee zou je wel op weg moeten geholpen zijn.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 12 mei 2004 @ 21:10:
[...]


Wat staat er in die txt, en waarom wil je hem als txt in je DB ?

MS SQL heeft een data-type text.
Lees je txt file in, gebruik daarvoor een StreamReader en FileStream en een stringbuilder.
Die stringbuilder heeft een ToString() method, als je je volledige file hebt ingelezen kan je dan gewoon dat boeltje inserten in SQL Server:

code:
1
2
3
4
5
6
7
8
while( MyStreamReader.Peek() != -1 )
{
    aStringBuilder.Append ( MyStreamReader.ReadLine());
}

MyCommand.Parameters["blaat"].Value = aStringBuilder.ToString();

MyCommand.ExecuteNonQuery();


Bovenstaande code is natuurlijk niet compleet, maar daarmee zou je wel op weg moeten geholpen zijn.
Ik wil het niet in txt, maar ik heb het in txt (simpele dir *.jpg > fotos.txt) en wil niet nutteloos werken. Momenteel zit ik ff te kijken naar BULK INSERT in MS SQL, normaal kan dat exact wat ik wil, alleen heb ik nog de permisies ervoor niet. Gelukkig is de provider redelijk vriendelijk en hopelijk geven ze mij de toegang.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
BULK INSERT zou dat idd normaal gezien moeten kunnen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 12 mei 2004 @ 21:20:
BULK INSERT zou dat idd normaal gezien moeten kunnen.
Normaal gezien heb ik tegen morgenmiddag antwoord van mijn provider of ze me al dan niet de juiste permissies toestaan om dit te mogen uitvoeren. Trouwens even langs de weg: met welke code laat je je programma automatisch afsluiten? Ik probeerde al met Me.Close() maar dat deed niets en Exit is blijkbaar ook niet gemaakt om dit te doen.

Verwijderd

Topicstarter
OK, BULK INSERT mag ik vergeten, provider wil het wel aanzetten maar als ze het voor ons doen moeten ze het voor iedereen doen en dat zien ze niet zitten.

Ik zoek dus nu een vb.net methode om dit te doen en heb deze code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    Public Sub Go()

        ' declare the StreamReader, for accessing the file
        Dim strWriter As StringWriter = New StringWriter()
        Console.SetOut(strWriter)

        Try
            Dim din As StreamReader = File.OpenText("fotos.txt")
            Dim str As String
            Dim al As ArrayList = New ArrayList()

            Do
                str = din.ReadLine()

                If str <> Nothing Then
                    al.Add(str)
                End If
            Loop Until str = Nothing

            Dim s As String
            Dim MyConnection As New SqlConnection()
            MyConnection = New SqlConnection("data source=[ip];initial catalog=[databasenaam];password=[pwd]" & _
    "U;persist security info=True;user id=[username];workstation id=[workstationname];pack" & _
    "et size=4096")

            For Each s In al
                Label1.Text = s
                Dim myCommand As SqlCommand
                Dim insertCmd As String
                insertCmd = "insert into l[tablename] values (@Foto);"
                myCommand = New SqlCommand(insertCmd, MyConnection)
                myCommand.Parameters.Add(New SqlParameter("@Foto", SqlDbType.VarChar, 250))
                myCommand.Parameters("@Foto").Value = "test"
                myCommand.ExecuteNonQuery()
                myCommand.Connection.Close()
            Next s

        Catch E As Exception

        End Try

    End Sub


Dit roep ik uit wanneer het programma start. Het probleem is dat mijn programma de insert niet kan doen voor één of andere reden. Als ik bij de ExecuteNonQuery() het commentaar-teken zet doet hij wel goed verder. (dat kan ik zien aan de tekst van Label1) Wanneer ik het weghaal stopt hij bij de eerste keer dat hij moet inserten. Iemand een hint? (heb de juiste librarys geimport denk ik wel want krijg geen errors bij compilen)

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Je zal toch wel een error krijgen waarom hij die insert niet kan doen.
En eigenlijk is het best logisch, want het INSERT statement dat daar zo staat, is ongeldig.

Wat doet die l daar al ten eerste?
Daarbij geef je ook niet op in welk veld die waarde moet geinserted worden.

Je INSERT query moet er zo (ongeveer) tui zien:
code:
1
INSERT INTO tabel ( veldnaam) VALUES ( @foto )


Daarnaast vind ik het ook onzin om na iedere insert je connectie te sluiten.

Je doet het beter zo:

code:
1
2
3
4
5
6
7
8
9
10
11
myCommand = new SqlCommand();
myCommand.CommandText = "INSERT INTO tabel ( veldnaam ) VALUES (@foto)";
myCommand.Parameters.Add ( ..... );
...
MyConnection.Open();
while (  )
{
     myCommand.Parameters["foto"].Value = ...
     myCommand.ExecuteNonQuery();
}
MyConnection.Close();

[ Voor 35% gewijzigd door whoami op 13-05-2004 21:58 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
OK, ik blijf eraan prutsen en het blijft mislukken. Ik heb nu deze code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    Public Sub Go()

        ' declare the StreamReader, for accessing the file
        Dim strWriter As StringWriter = New StringWriter()
        Console.SetOut(strWriter)

        Try
            Dim din As StreamReader = File.OpenText("fotos.txt")
            Dim str As String
            Dim al As ArrayList = New ArrayList()

            Do
                str = din.ReadLine()

                If str <> Nothing Then
                    al.Add(str)
                End If
            Loop Until str = Nothing

            Dim s As String

            For Each s In al
                Me.SqlInsertCommand1.Parameters("@Foto").Value = "test"
                Me.SqlInsertCommand1.ExecuteNonQuery()
                Label1.Text = s
            Next s

        Catch E As Exception
            Label1.Text = "vergeet het"

        End Try

    End Sub


Als ik het zo laat staan en mijn programma uitvoer krijg ik als tekst "vergeet het". Wil dus duidelijk zeggen dat er een exception is. Als ik echter de SqlInsertCommand1.Parameter en SqlInsertCommand1.ExecuteNonQuery() commentaar maak dan werkt het programma wel zoals het moet.

SqlInsertCommand1 is zeker correct daar het door Visual Studio.NET zelf aangemaakt wordt (door verslepen uit de Server Explorer naar mijn App.
Iemand ideeën hoe ik verder kan zoeken wat de fout is?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Tja, je fout zit dus bijna zeker in je INSERT statement, en dat laat je niet zien. Veel valt er dus niet over te zeggen.
Daarnaast zie ik ook niet waar je de connectie opent en sluit, en ipv die tekst 'Vergeet het' te tonen bij een exceptie, zou je beter de foutmelding die het exception object bevat bekijken. Dan weet je tenminste wat er fout gaat, of je krijgt dan toch een duw in de goede richting.
(De basics van debuggen is toch eerst kijken wat / waar het fout gaat, en dat kan je niet doen door 'natte vinger' werk).

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 14 mei 2004 @ 10:28:
Tja, je fout zit dus bijna zeker in je INSERT statement, en dat laat je niet zien. Veel valt er dus niet over te zeggen.
Daarnaast zie ik ook niet waar je de connectie opent en sluit, en ipv die tekst 'Vergeet het' te tonen bij een exceptie, zou je beter de foutmelding die het exception object bevat bekijken. Dan weet je tenminste wat er fout gaat, of je krijgt dan toch een duw in de goede richting.
(De basics van debuggen is toch eerst kijken wat / waar het fout gaat, en dat kan je niet doen door 'natte vinger' werk).
Ja ik ben een hele *newbie* in vb.net dus ik probeer vooral te zoeken in help etc en aan te passen. Dat bericht was dus ook alleen maar om te zien of er een exception was daar ik niet weet hoe ik de foutmelding kan laten tonen.
Het insert-statement klopt volgens mij wel, dat heb ik via de query analyser al eens uitgeprobeert en die doet het zoals het hoort. Als je wil kan ik altijd heel de code hier posten (wel aangepast zodat ip en zo er uit zijn, dat was trouwens die 'l' die er nog stond, iets te weinig gedelete).

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Ik denk niet dat het posten van de hele code hier geapprecieerd wordt. Dan lijkt het echt te veel op 'debug het eens voor me'.
Een relevant stuk code is genoeg, maar de code die je nu gepost hebt is zowiezo niet veel. Daarbij kijk je best eerst eens zelf wat de exacte foutmelding nu juist is.

Je kan dat zien door simpelweg geen exceptions te 'catchen', je krijgt ze dan gewoon voor je neus. Je kan het ook zo doen:
code:
1
2
3
4
5
6
7
try
{
}
catch( Exception ex )
{
   label1.Text = ex.Message;
}

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 14 mei 2004 @ 10:53:
code:
1
2
3
4
5
6
7
try
{
}
catch( Exception ex )
{
   label1.Text = ex.Message;
}
Ok dit deed het. Hiermee heb ik mijn fouten eruit kunnen halen en nu functioneren de inserts. Rest nog een vraag: hoe sluit je je programma vanzelf af na het uitvoeren van zijn code. Ik zocht al op Me.Close() maar dat doet het niet en Unload is blijkbaar niet voor vb.net gemaakt of zo want dat krijg ik niet aan de praat. Alleszins al bedankt voor alle hulp _/-\o_

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Wat was er dan fout ?

Is het een windows-applicatie ? Application.Exit()

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 14 mei 2004 @ 13:36:
Wat was er dan fout ?

Is het een windows-applicatie ? Application.Exit()
Eerste fout was dat de connectie niet geopend was dus dat heb ik aangepast en dan had ik nog een primary key violation (beetje onoplettend), daarna ging het zoals het moet.
Met Application.Exit() raak ik er niet. Ik heb in de search gekeken en daar staat ook Application.Exit() maar het doet bij mij gewoon niets. Ik heb een standaard vb.net windows application en zet die Application.Exit() in de sub New() omdat ik merk dat dat zowat het alternatief van onLoad is of zo. Het programma sluit echter helemaal niet af. Nog één laatste hintje :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
New() is de constructor.

Zet die Application.Exit() in je method die het inlezen doet, en zet ze dan wel nadat je alles ingelezen hebt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 14 mei 2004 @ 13:52:
New() is de constructor.

Zet die Application.Exit() in je method die het inlezen doet, en zet ze dan wel nadat je alles ingelezen hebt.
Heb dit hier net zo goed mogelijk proberen verstaan...maar zoals ik al zei *ferm newbie*.
Ik heb eerst nog snel gecontroleerd door een button toe te voegen en dan als click-event die Application.Close() te doen en da werkt dus al.
Nu ben ik naar die method op zoek gegaan. Het enige dat ik kan bedenken waarin ingelezen wordt is mijn sub die ik zelf gemaakt heb. Als ik dus onderaan die sub die Application.Close() zet brengt dat nog steeds niets op, kan je iets meer info geven over wat je met die method bedoelt?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:18
Waar zet je dat statement dan ? Je zet het toch niet in je catch clausule ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Momenteel ben ik het aan het uittesten met mijn programma dat een lijst uit de database output naar een txt-file. Die sub noemt GroepOutput(). Die roep ik aan uit New() en die werkt goed. Ik plaats volledig onderaan (dus net boven "end sub") Application.Close() maar dat werkt dus niet.

Verwijderd

Topicstarter
K heb het anders opgelost. Daar het programma toch maar in een flits open en toe gaat heb ik een label in mijn form geplaatst. Dit label staat standaard op hidden en ik heb als action bij visiblechanged die Application.Exit() geplaatst. In de New() sub zet ik gewoon na al mijn opdrachten "Label1.Visible = True" en voila, programma sluit af zoals het hoort. Mijn programma is nu volledig af denk ik, dus wil ik eventjes heel oprecht iedereen van harte bedanken om mij een paar hints toe te fluisteren, zonder jullie was ik er niet geraakt. Bedankt !!!
Pagina: 1