[VB .NET]Variabele query maken.

Pagina: 1
Acties:

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
Hallo, ik ben bezig een soort chart programmatje te maken waarbij je met asp .net in een pagina verschillende charts kan maken, door bijvoorbeeld een bepaalde tijd en een bepaald station van data te selecteren. Hiervoor wou ik een soort standaard query maken (wat opzich vrij eenvoudig te realiseren is) waarin ik variabelen kan opnemen. Nu had ik zoiets geprobeerd:

code:
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
Dim station As String      
Dim sqlstr As String

        sqlstr = "SELECT " & Station & "_debav.t2m AS temp1, " & Station 
& "_hirlam11.t2m AS temp2, " & Station & "_debav.voorspelte" & _
        "rmijn AS vp1, " & Station & "_hirlam11.voorspeltermijn AS vp2, " & Station 
& "_debav.fictievedatum AS " & _
        "date1, " & Station & "_hirlam11.fictievedatum AS date2 FROM " & Station 
& "_debav INNER JOIN " & Station & "_hirl" & _
        "am11 ON " & Station & "_debav.fictievedatum = " & Station 
& "_hirlam11.fictievedatum WHERE (" & Station & "_debav" & _
        ".voorspeltermijn = '+12') AND (" & Station & "_hirlam11.voorspeltermijn 
= '+12')"

... hoop niet relevante standaard code...

Me.OleDbSelectCommand1.CommandText = sqlstr
Me.OleDbSelectCommand1.Connection = Me.OleDbConnection1

Me.OleDbConnection1.ConnectionString = "Provider=SQLOLEDB.1;Persist Security 
Info=False;User ID=sa;Initial Catalog=verifi" & _
        "catiedatabaseSQL;Data Source=BXP290\VSdotNET;Use Procedure for 
Prepare=1;Auto Tr" & _
        "anslate=True;Packet Size=4096;Workstation ID=BXP290;Use Encryption for 
Data=Fals" & _
        "e;Tag with column collation when possible=False"


Alleen krijg ik bij het invoegen van de variabele 'station' de volgende error:
Operator '&' is not defined for types 'String' and 'System.Web.UI.Webcontrols.Dropdownlist'.
Nu ben ik nog maar net begonnen met VB .Net, maar volgens wat voorbeelden op andere forums (googlen naar variable query) moet het ongeveer wel zo zijn. Wat doe ik precies fout, moet ik gewoon simpelweg een andere operator gebruiken of is het probleem wat dieper? In VBscript werkte het iig wel zo... Alvast bedankt :)

[ Voor 12% gewijzigd door DarkShadow op 19-04-2004 09:49 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Je moet ook niet je dropdownlist control aan die string plakken, maar hetgeen geselecteerd is in de dropdownlist.

Daarnaast vind ik het behoorlijk ranzig om je string te gaan splitsen midden in een woord...

[ Voor 198% gewijzigd door whoami op 19-04-2004 09:54 ]

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Een van je variabelen in je querystring in een dropdownlist, daar moet je

DeVariabeleMetDeDropDownList.SelectedItem.Value voor nemen.

Lees ook eens iets over parametrized queries, trouwens. En je connectionstring hard coden in je code? :X Daar hebben ze oa. de web.config voor uitgevonden.

Inloggen verder met het sa-account? :X Lijkt me ook niet echt handig qua security...

In vbscript / ASP werkte het trouwens anders, daar moest je Request.Form gebruiken; iets wat ik hoop dat je niet gebruikt in ASP.Net.

[ Voor 50% gewijzigd door gorgi_19 op 19-04-2004 09:56 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

gorgi_19 schreef op 19 april 2004 @ 09:54:
Lees ook eens iets over parametrized queries, trouwens.
Paramized query is denk ik zoals gorgi al aangeeft een beteren onlossing voor jou. Het is er immers voor gemaakt.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Nog een tip:

ASP.NET Webdev tips
Waar zet ik het beste een connectionstring?
parametrized queries

[ Voor 24% gewijzigd door gorgi_19 op 19-04-2004 09:59 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
hmmm bedankt voor de reacties, en wat account betreft enzo, dit is alleen maar ff om te testen, dat boeit me verder nog niet zo heel erg, sterker nog het is het enige bestaande account :P

Request.Form gebruik ik niet, maar ik zocht dus wel iets wat ongeveer hetzelfde werkt...

zal eens ff lezen hoe dat web.config en parametrized queries werkt, bedankt voor de kant en klare linkjes :)

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
hmmm ik heb nu het volgende stukje code gemaakt zoals wat er in de faq stond over parametrized queries, maar ik krijg nog steeds een error:
code:
1
2
Dim sSQL As String
        sSQL = "SELECT @p_station_debav.t2m AS temp1, // etc, etc


en dit:

code:
1
2
3
4
        Me.OleDbSelectCommand1.CommandText = sSQL
        Me.OleDbSelectCommand1().Parameters.Add("@p_station", SqlDbType.VarChar)
        Me.OleDbSelectCommand1().Parameters["@p_station"].Value = Station
        Me.OleDbSelectCommand1.Connection = Me.OleDbConnection1


Met de derde zin geeft hij de volgende error:
Property access must assign to the property or use its value.
Kan iemand me uitleggen wat ik nu fout doe, sorry als ik erg dom overkom trouwens :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Nu ik je query eens wat verder lees, heb je voor ieder station een eigen tabel gemaakt?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Waarom zet je daar haakjes (na OleDbSelectCommand1)?
Een parameter in de select-list ?
Waarom zet je geen quotes rond Station? Station is toch een string?

https://fgheysels.github.io/


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
gorgi_19 schreef op 19 april 2004 @ 10:33:
Nu ik je query eens wat verder lees, heb je voor ieder station een eigen tabel gemaakt?
Ja, ik weet dat de database niet goed is :), ben hem al aan het normaliseren, maar ik moet dit ook ff testen ;)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 19 april 2004 @ 10:33:
Waarom zet je geen quotes rond Station? Station is toch een string?
Erger nog, 't is onderdeel van een tabelnaam.. :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
whoami schreef op 19 april 2004 @ 10:33:
Waarom zet je daar haakjes (na OleDbSelectCommand1)?
Een parameter in de select-list ?
Waarom zet je geen quotes rond Station? Station is toch een string?
hmm haakjes tiepfoutje, krijg je als je het selecteerd in zon dropdownlist,
die quotes moeten in de query zelf?

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
gorgi_19 schreef op 19 april 2004 @ 10:34:
[...]

Erger nog, 't is onderdeel van een tabelnaam.. :P
juist, ik weet het :P, nogmaals sorry, elke keer als ik een topic open valt het iemand wel weer op dat mn database zuigend is opgebouwd, het begint beschamend te worden :D

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

DarkShadow schreef op 19 april 2004 @ 10:34:
[...]


Ja, ik weet dat de database niet goed is :), ben hem al aan het normaliseren, maar ik moet dit ook ff testen ;)
* gorgi_19 gokt dat het gedeelte van parametrized queries een stuk eenvoudiger en makkelijker gaat werken op een goed genormaliseerde database.
juist, ik weet het , nogmaals sorry, elke keer als ik een topic open valt het iemand wel weer op dat mn database zuigend is opgebouwd, het begint beschamend te worden
Nah, je maakt het vooral jezelf een stuk moeilijker. Aanmaken van een nieuw station is vrij lastig (om dat vanuit code te doen), queries uitvoeren wordt lastiger (je moet regelmatig met unions aan de slag), parametrized queries zijn lastig uitvoerbaar, etc. :)

[ Voor 39% gewijzigd door gorgi_19 op 19-04-2004 10:38 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
gorgi_19 schreef op 19 april 2004 @ 10:37:
[...]

* gorgi_19 gokt dat het gedeelte van parametrized queries een stuk eenvoudiger en makkelijker gaat werken op een goed genormaliseerde database.
Waarom dan eigenlijk? Het voordeel is toch gewoon performance en beter overzicht? Het zou in principe toch ook zo moeten werken, ik kan ook wel ff een wat simpelere query maken voor maar 1 tabel, dat ik iets anders variabel maak...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Ik dacht trouwens dat het al eens in een ander topic vermeld was dat je beter een tabel maakt 'weerstations' die gelinked is met een tabel 'metingen'.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

DarkShadow schreef op 19 april 2004 @ 10:39:
[...]


Waarom dan eigenlijk? Het voordeel is toch gewoon performance en beter overzicht? Het zou in principe toch ook zo moeten werken, ik kan ook wel ff een wat simpelere query maken voor maar 1 tabel, dat ik iets anders variabel maak...
SQL:
1
Select * From @Tabelnaam

Gaat afaik niet werken. Je mist trouwens ook de security in je verhaal, niet alleen performance en beter overzicht.

Voor een beter overzicht had je ook String.Format kunnen gebruiken.

[ Voor 18% gewijzigd door gorgi_19 op 19-04-2004 10:46 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 00:03
whoami schreef op 19 april 2004 @ 10:40:
Ik dacht trouwens dat het al eens in een ander topic vermeld was dat je beter een tabel maakt 'weerstations' die gelinked is met een tabel 'metingen'.
Yup heb ik inmiddels gemaakt, moest alleen nog ff overstappen, maar nu heb ik in de tabel gegevens (metingen dus, maar het zijn eigenlijk niet altijd metingen, dus noem ik het maar gegevens :P ) een stationid en een reeksid aangemaakt, en ook weer een nieuwe tabel voor reeksen... Ik ben benieuwt of dat echt mn probleem gaat oplossen... Ik ben sowieso helemaal nieuw op het gebied van programmeren en databases, studeer technische natuurkunde en dan kom je daar niet enorm veel mee in aanraking. Het is overigens gelukkig wel erg leuk, dus de motivatie is er.

Maar over die error, die gaat toch niet verdwijnen bij een genormaliseerde database?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Afaik horen die haakjes er niet tussen.
m'goed, een voorbeeldje van mij.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   Public Sub UpdateProductionDecision(ByVal pd As Components.ProductionDecision) 

            ' Create Instance of Connection and Command Object
            Dim myConnection As SqlConnection = GetSqlConnection()
            Dim myCommand As New SqlCommand("Select * FROM tabelnaam WHERE CompanyID = @CompanyID", myConnection)

            ' Mark the Command as a Parametrized query
            myCommand.CommandType = CommandType.Text

            ' Add Parameters to Parametrized query
            myCommand.Parameters.Add("@companyID", SqlDbType.Int, 4).Value = pd.companyID

            myConnection.Open()
            myCommand.ExecuteNonQuery()
            myConnection.Close()

        End Sub

Weliswaar met de dataprovider voor SQL Server, maar geeft iig een idee.

[ Voor 14% gewijzigd door gorgi_19 op 19-04-2004 10:51 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1