Springen naar inhoud


- - - - -
VS 2015

Soap Api

VS2015

  • Log in a.u.b. om te beantwoorden
Er zijn 14 reacties in dit onderwerp

#1 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 08 juni 2018 - 21:29

Hallo,

Ik heb een Soap Api en op zicht werkt deze prima
Ik maak een met een sql een selectie en return deze as datatable

Echter in mijn DB is alles opgeslagen als webUrl dit omdat ik dan geen rekening hoef te houden met de charset van mijn db

echter moet ik alle strings terug converteren , daar heb ik een functie voor maar hoe doe ik dat met een datatable ?

Code:
<System.Web.Script.Services.ScriptService()>
<System.Web.Services.WebService(Namespace:="http://grepoinfo.com")>
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class getAlliancesRanking
	Inherits System.Web.Services.WebService
	<WebMethod()>
	Public Function getAllianceRankings(Server As String, World As String) As DataTable
		Dim datum As DateTime = DateTime.Now
		Server = Server.ToUpper
		World = World.ToUpper
		Using adtCon As New AdsConnection("Data Source=c:\grepoinfo\files\GrepoInfo.add;Advantage Server Type =REMOTE;TrimTrailingSpaces=True;User ID=naam;Password=pass")
			adtCon.Open()
			adtCon.DateFormat = "dd-MM-yyyy"
			Using adtCmd = adtCon.CreateCommand
				'Dim tmp As New DataTable("tmp")
				Dim result As New DataTable("AllianceRankings")
				adtCmd.CommandText = "SELECT TOP 250 ROWNUM() AS [NO],ALLIANCE.[NAME] ,CURR_ATT " +
				"INTO #ATT " +
				"FROM ALLIANCE " +
				"WHERE SERVER ='" + Server + "' " +
				"AND WORLD ='" + World + "' " +
				"AND [DATE]='" + datum.ToString("dd-MM-yyyy") + "' " +
				"ORDER BY CURR_ATT DESC; " +
				"SELECT TOP 250 ROWNUM() AS [NO],ALLIANCE.[NAME],CURR_DEF AS [DEF POINTS] " +
				"INTO #DEF " +
				"FROM ALLIANCE " +
				"WHERE SERVER ='" + Server + "' " +
				"AND WORLD ='" + World + "' " +
				"AND [DATE]='" + datum.ToString("dd-MM-yyyy") + "' " +
				"ORDER BY CURR_DEF DESC; " +
				"SELECT TOP 250 ROWNUM() AS [NO],ALLIANCE.[NAME],CURR_ALL " +
				"INTO #ALLL " +
				"FROM ALLIANCE " +
				"WHERE SERVER ='" + Server + "' " +
				"AND WORLD ='" + World + "' " +
				"AND [DATE]='" + datum.ToString("dd-MM-yyyy") + "' " +
				"ORDER BY CURR_ALL DESC; " +
				"SELECT TOP 250 ROWNUM() AS [NO],ALLIANCE.[NAME],[POINTS] " +
				"INTO #POINTS " +
				"FROM ALLIANCE " +
				"WHERE SERVER ='" + Server + "' " +
				"AND WORLD ='" + World + "' " +
				"AND [DATE]='" + datum.ToString("dd-MM-yyyy") + "' " +
				"ORDER BY POINTS DESC; " +
				"SELECT TOP 250 ROWNUM() AS [NO],ALLIANCE.[NAME],TOWNS " +
				"INTO #TOWNS " +
				"FROM ALLIANCE " +
				"WHERE SERVER ='" + Server + "' " +
				"AND WORLD ='" + World + "' " +
				"AND [DATE]='" + datum.ToString("dd-MM-yyyy") + "' " +
				"ORDER BY TOWNS DESC; " +
				"SELECT ATT.NO,ATT.[NAME],ATT.CURR_ATT,DEF.NAME,DEF.CURR_DEF,ALLL.[NAME],ALLL.CURR_ALL,POINTS.NAME,POINTS.POINTS,TOWNS.[NAME],TOWNS.TOWNS " +
				"FROM #ATT " +
				"LEFT OUTER JOIN #DEF " +
				"ON DEF.NO=ATT.NO " +
				"LEFT OUTER JOIN #ALLL " +
				"ON ALLL.NO=ATT.NO " +
				"LEFT OUTER JOIN #POINTS " +
				"ON POINTS.NO=ATT.NO " +
				"LEFT OUTER JOIN #TOWNS " +
				"ON TOWNS.NO=ATT.NO "
				Using reader = adtCmd.ExecuteReader()
					result.Load(reader)
				End Using

				Return result
			End Using
		End Using
	End Function
	Private Function ConvertWebURlString(Text As String) As String
		Dim decoded = System.Web.HttpUtility.UrlDecode(Text)
		Return decoded.Trim
	End Function



#2 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 09 juni 2018 - 10:14

Bericht bekijkenHansiebebe, op 08 juni 2018 - 21:29, zei:

Echter in mijn DB is alles opgeslagen als webUrl dit omdat ik dan geen rekening hoef te houden met de charset van mijn db
Waarom sla je die strings niet gewoon op als UTF-16 in je databank?
Nadeel is dat alle string velden dubbel zo groot zullen zijn.

Bericht bekijkenHansiebebe, op 08 juni 2018 - 21:29, zei:

echter moet ik alle strings terug converteren , daar heb ik een functie voor maar hoe doe ik dat met een datatable ?
Met UTF-16 heb je geen conversie nodig. Noch heen noch weer.
Dat is dan het voordeel.

#3 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 09 juni 2018 - 20:22

De data die ik binnenhaal is url decoded
Dus als ik goed begrijp regelt de db het met UTF-16 zelf ?

#4 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 10 juni 2018 - 08:12

View PostHansiebebe, on 09 juni 2018 - 20:22, said:

De data die ik binnenhaal is url decoded
Url decoded? Waarover heb je het?
Dat komt van een web server?
Dat is text? Wat is het formaat? Is dat Ansi, of UTF-8, of UTF-16?

View PostHansiebebe, on 09 juni 2018 - 20:22, said:

Dus als ik goed begrijp regelt de db het met UTF-16 zelf ?
Gezien je begon over "charset" van je db, vermoed ik dat je de data opslaat als ANSI?
Dat is geen goed idee.
Lees (al 15 jaar oud, maar blijkbaar nog steeds erg nodig) : The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

#5 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 10 juni 2018 - 09:12

System.Web.HttpUtility.UrlDecode

dus Boris boef word Boris%20Boef

#6 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 10 juni 2018 - 09:13

View PostHansiebebe, on 10 juni 2018 - 09:12, said:

System.Web.HttpUtility.UrlDecode

dus Boris boef word Boris%20Boef

en ja, UTF-8


#7 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 10 juni 2018 - 11:08

View PostHansiebebe, on 10 juni 2018 - 09:13, said:

System.Web.HttpUtility.UrlDecode

dus Boris boef word Boris%20Boef


Euh , dat is UrlEncode en dat UrlEncode("Boris boef") geeft denk ik "Boris+boef", niet" Boris%20boef"

Dus je krijgt UTF-8 binnen, encodeert het naar url formaat (waarom???) en naar UTF-16 (wat UrlEncode doet als je er geen Encoding bijgeeft) en stopt dat zo in de databank?
Maar die databank slaat dat niet op als UTF-16 maar converteert het naar Ansi in een niet nader genoemde karakter set (of bedoel je code page)?

En nu wil je het uit de databank lezen in een datatable. De strings in je datatable zijn UTF-16 (het interne formaat van System.String) én encoded als url (zijn het uberhaupt wel urls???)
en die wil je converteren UrlDecode.

En voor de goede orde: je data zijn GEEN urls (want dan zou je ook niet moeten decoderen)????

Begrijp ik het zo goed?

Als dat klopt denk ik dat je een fout probleem probeert op te lossen, of in het beste geval het juiste probleem op een foute wijze.
Dus een stapje terug: wat is het probleem dat je probeert op te lossen?

#8 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 10 juni 2018 - 17:13

Ik sla de data op zoals ik hem binnen haal
Dit omdat ik ook Griekse, Russische en Techiese namen binnen krijg.

Op het moment dat ik publiceer converteer ik ze met : System.Web.HttpUtility.UrlDecode

Werkt allemaal prima en snel

Maar ik wil nu beginnen met de data beschikbaar stellen door middel van webservices die ik kan uitlezen op mijn website

Bijlage players.txt 385.74K 33 Aantal bijlagen

#9 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 15 juni 2018 - 08:39

Bericht bekijkenHansiebebe, op 10 juni 2018 - 17:13, zei:

Op het moment dat ik publiceer converteer ik ze met : System.Web.HttpUtility.UrlDecode
Waarom doe je dat niet als je de data binnenkrijgt?

Bericht bekijkenHansiebebe, op 10 juni 2018 - 17:13, zei:

Ik sla de data op zoals ik hem binnen haal
Dit omdat ik ook Griekse, Russische en Techiese namen binnen krijg.
Als je wegschrijft als unicode dan is er toch nooit een probleem?
Tenzij je databank daar andere dingen mee doet.
Wat is "het merk" en de versie van je databank?
Doet die geen unicode?

#10 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 15 juni 2018 - 09:12

Bericht bekijkenHansiebebe, op 08 juni 2018 - 21:29, zei:

Ik maak een met een sql een selectie en return deze as datatable

Echter in mijn DB is alles opgeslagen als webUrl dit omdat ik dan geen rekening hoef te houden met de charset van mijn db

echter moet ik alle strings terug converteren , daar heb ik een functie voor maar hoe doe ik dat met een datatable ?

Ik vind dat het niet zou hoeven (en ik denk dat je het kan vermijden), maar indien je dat niet wil:

Over alle rijen itereren, over alle kolommen itereren en indien het type van de kolom String is én niet readonly: de inhoud vervangen door de gedecodeerde inhoud.
Als je weet dat er b.v. maar 1 of twee kolommen moeten gedecodeerd worden, kan je die hardcoderen i.p.v. alle kolommen te beschouwen.

Bijvoorbeeld:
Visual Basic Code:
	Dim stringType = GetType(String)
	For Each rij as DataRow In table.Rows
		For Each kol as DataColumn In table.Columns
			If Not kol.ReadOnly AndAlso kol.DataType Is stringType
				rij.Item(kol.Ordinal) = Decode(rij.Field(Of String)(kol.Ordinal))
			End If
		Next
	Next
	' schrijft de wijzigingen weg in de datatable
	' opletten dat je dit niet naar de databank wegschrijft
	 table.AcceptChanges



#11 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 15 juni 2018 - 12:51

Ik gebruik Advantage Database Server versie 11.10.0.24

Bericht bekijkenDirk Andries, op 15 juni 2018 - 09:12, zei:

Ik vind dat het niet zou hoeven (en ik denk dat je het kan vermijden), maar indien je dat niet wil:
Ik sla de data ruw op omdat ik dacht dan hoef ik pas te converteren op het moment dat ik het nodig heb
Het verzamelen van data gaat ook snel (mede dankzij u hulp )
Maar ik sta altijd open voor verbeteringen.

Bericht bekijkenDirk Andries, op 15 juni 2018 - 09:12, zei:

Visual Basic Code:
Dim stringType = GetType(String)
For Each rij as DataRow In table.Rows
	 For Each kol as DataColumn In table.Columns
		 If Not kol.ReadOnly AndAlso kol.DataType Is stringType
			 rij.Item(kol.Ordinal) = Decode(rij.Field(Of String)(kol.Ordinal))
		 End If
	 Next
Next


Hier ga ik vanavond mee stoeien

bedankt voor u hulp alvast

#12 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 15 juni 2018 - 18:11

Bericht bekijkenHansiebebe, op 15 juni 2018 - 12:51, zei:

Ik gebruik Advantage Database Server versie 11.10.0.24
Volgens mij doet dat ook unicode, zie nvarchar type.


Bericht bekijkenHansiebebe, op 15 juni 2018 - 12:51, zei:

Ik sla de data ruw op omdat ik dacht dan hoef ik pas te converteren op het moment dat ik het nodig heb
Als je maar 1 x schrijft en vele malen leest is het slimmer om de conversie te doen voor het schrijven dan na het lezen, denk ik zo.

#13 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 15 juni 2018 - 18:16

Bericht bekijkenDirk Andries, op 15 juni 2018 - 18:11, zei:

Volgens mij doet dat ook unicode, zie nvarchar type.
Vanaf versie 10: Unicode support

#14 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 15 juni 2018 - 22:05

Klinkt intressant
Ik ga ermee experimenteren op mijn ontwikkel server

#15 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1092 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 16 juni 2018 - 15:04

Bericht bekijkenHansiebebe, op 15 juni 2018 - 22:05, zei:

Klinkt intressant
Ik ga ermee experimenteren op mijn ontwikkel server
Houdt je van de straat. :D





Ook met taq VS 2015, VS2015 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2015] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)