Multidesk.be » Forums » ASP » ASP.Net website overzetten naar hosting met MySQL

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Ezio op dinsdag 10 juni 2014 om 15:41:46.
Ezio's avatar
Multiviteit: 973
Hey,

Mijn webshop (Gamezilla) draaide tot voor kort op mijn eigen webserver met MS SQL als databaseserver. Voor GP Award heb ik ervoor gekozen de website niet op mijn eigen server te laten draaien, maar bij een andere webhoster. Ik keek wat voor mij prijs-kwaliteit de voordeligste optie was, en besloot om een 'Totaalhosting' pakket te nemen bij MijnHostingPartner.nl

Het enige probleem is echter dat enkel MySQL database opgenomen is bij deze webshoster. Voor MS SQL moet er bijbetaald worden. Ik plaatste mijn websitebestanden op de server van MijnHostingPartner, maar kreeg een error bij het bezoeken van de pagina.

De helpdesk vertelde me dat de fout bij de connectionstring lag (dit was ook letterlijk het enige dat ze te zeggen hadden, daar geven ze je dus enkel een duwtje in de rug, de rest moet je maar lekker zelf uitdokteren...). Mijn connectionstring was namelijk opgebouwd voor MS SQL, terwijl ik hem nu probeer te draaien op een MySQL server.

Ondertussen heb ik mijn connectionstring in het web.config bestand gewijzigd naar onderstaande:

CODE
  1.  
  2. <connectionStrings>
  3.  <add name="cnnGamezilla" connectionString="SERVER=mysql8.mijnhostingpartner.nl;      DATABASE=SeynaeveGamezilla; UID=XXXX; PASSWORD=XXXX" providerName="MySql.Data.MySqlClient" />
  4. </connectionStrings>
  5.  



Dit heeft het probleem echter niet verholpen, ik krijg nu deze error: 'The system cannot find the file specified'. Een gedetailleerde versie van deze error is te bekijken op www.gamezilla.be

Misschien is de eerste vraag waarop we een antwoord moeten vinden de volgende: moet ik enkel web.config aanpassen om de website te laten runnen op een MySQL server, of moet er nog iets gewijzigd worden in de code zelf?

Alvast een dikke merci! :D

Greetz,
Thibault
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #1 geschreven door thekid op dinsdag 10 juni 2014 om 21:18:45.
thekid's avatar
Multiviteit: 5273
Moderator
de connectionstring kan je steeds hier terugvinden:
http://www.connectionstrings.com

zoals je ziet heb je ook de providerName verandert. Kan je eens tonen hoe je gegevens opvraagt en bewaart in je database? (C# code met sql statements)

mssql en mysql heb ook een licht verschillende syntax, en werken iets anders met parameters
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #2 geschreven door Ezio op dinsdag 10 juni 2014 om 21:31:18.
Ezio's avatar
Multiviteit: 973
Deze code gebruik ik om data op te vragen:
CODE
  1.  
  2. Imports System.Data.SqlClient
  3. ...
  4. Dim sqlcon As New SqlConnection(ConfigurationManager.ConnectionStrings("cnnGamezilla").Connectionstring)
  5.  
  6. Dim sqlcmd as new sqlcommand
  7. Dim strSQL as string
  8.  
  9. strSQL = "SELECT Klant_ID FROM tblKlanten WHERE Klant_Login_naam = '" & strGebruikersnaam & "'"
  10.  
  11. with sqlcmd
  12.    .connection = sqlcon
  13.    .commandText = strsql
  14. End with
  15.  
  16. sqlcon.open
  17.  
  18. intResultaat = sqlcmd.executescalar
  19.  
  20. sqlCon.close
  21.  


:D

I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #3 geschreven door thekid op dinsdag 10 juni 2014 om 23:02:54.
thekid's avatar
Multiviteit: 5273
Moderator
Mja, je zal er wel wat werk aan hebben, hangt er dus vanaf hoeveel tijd je hebt ervoor :)

CODE
  1. Imports MySql.Data.SqlClient
  2.  
  3. Dim sqlcon as New MySqlConnection(...)
  4.  
  5. dim sqlcmd as new MySqlCommand()


zijn zo enkele van de veranderingen.

paging van data is ook iets anders, select top 10 from table wordt nu select * from table limit 0, 10. Wild cards om te zoeken zijn iets ook iets anders.

Over het algemeen kan je het oplossen door de MySql.net connector van de MySqlDatabase te halen en deze in je project te referencen. Dan eens kijken of je zo verbinding kunt maken. Voor de rest, search and replace:
- SqlConnection naar MySqlConnection
- SqlCommand naar MySqlCommand
- SqlDataAdapter naar MySqlDataAdapter
- SqlParameter naar MySqlParameter (waarbij parameters nu niet meer via @p1 gaan maar via placeholders die namen toelaten)

Dit is een mooi voorbeeld om je interactie met je database zo veel mogelijk uit je presentatie te halen, het is veel gemakkelijker om de gecentraliseerde functies aan te passen, dan dit doorheen je code te moeten doen.

Verder hoop ik dat strGebruikersnaam wel degelijk veilig is tegen sqlinjection

link voor connector:
http://dev.mysql.com/downloads/connector/net/

en een beetje info
http://www.connectionstrings.com/mysql-connector-net-mysqlconnection/info-and-download/
Deze tekst werd het laatst bewerkt voor 4.29 % door thekid op dinsdag 10 juni 2014 om 23:04:50.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #4 geschreven door Ezio op woensdag 11 juni 2014 om 13:22:05.
Ezio's avatar
Multiviteit: 973
Voor een Microsoft SQL database moet ik 32 EUR(!!) bijbetalen... ik zal er dus wel wat tijd voor moeten vrijmaken :)

De VB code aanpassen lijkt simpel en zou geen probleem mogen vormen. Ik heb zopas die connector gedownload en een reference toegevoegd aan mijn projectje naar MySql.Data. Ik krijg nog steeds een error als ik mijn website wil bezoeken, maar volgens mij is dit te wijten aan het feit dat ik mijn ASP code zelf nog niet heb aangepast. Zal dit zo snel mogelijk doen :)

ENORM bedankt voor de heldere uitleg!!

EDIT
Om nog even terug te komen op die SQL Injection. Die strGebruikersnaam haalt zijn waarde uit een session. De gebruikersnaam wordt namelijk ingevoerd op een andere pagina. Is de waarde van een session vatbaar voor SQL Injection, of is het net zoals bij parameters dat SQL Injection hier niet mogelijk is? :)

EDIT 2
Nog een klein vraagje. Je zegt dat je TOP vervangt door LIMIT 0,X. Waarom niet gewoon LIMIT X? Heeft die eerste 0 een speciale functie? :)
Deze tekst werd het laatst bewerkt voor 8.28 % door Ezio op woensdag 11 juni 2014 om 13:31:50.
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #5 geschreven door thekid op woensdag 11 juni 2014 om 14:16:29.
thekid's avatar
Multiviteit: 5273
Moderator
Ja, je zal nu inderdaad je codes moeten omzetten, alles van System.Data.SqlClient eruit en alles omzetten naar MySql.Data.SqlClient

over je eerste edit:

wat maakt het moeilijker om je code te lezen, wat je nu hebt of dit

CODE
  1. using (MySqlCommand command = new MySqlCommand("select Klant_ID from tblKlanten where Klant_Login_Naam = @naam", conn)) {
  2.      command.Parameters.AddWithValue("@naam", strGebruikersnaam);
  3.  
  4.      ...
  5. }

(in C# daar ik dat uit mijn hoofd kan ;))
dit staat je eigenlijk gewoon toe om je sql statements en je eigen invoer van elkander te scheiden. Je hoeft je ook totaal geen zorgen meer te maken over hoe je de waarde in SQL statement moet meegeven, of wat je juist uit je code moet halen om de injectie tegen te houden.

Alle invoer van gebruikers kan gevaarlijk zijn, met parameters werken is een voordeel, dat je steeds moet gebruiken, het maakt uw leven een stuk gemakkelijker ;)

over edit 2:

MySql definieert skip en top op deze manier, de 0 is hoeveel records geskipt moeten worden, en de 10 is hoeveel records je maximaal wilt ophalen

limit 0, 10 = eerste 10
limit 10, 10 = 11 - 20
limit 20, 10 = 21 - 30
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #6 geschreven door thekid op donderdag 12 juni 2014 om 11:38:24.
thekid's avatar
Multiviteit: 5273
Moderator
en, lukt het een beetje? Vergeet zeker niet alle Insert, Update, en select statements opnieuw te testen, daar het ietwat verschillen kan opleveren MySql vs MsSql
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #7 geschreven door Ezio op donderdag 12 juni 2014 om 15:35:59.
Ezio's avatar
Multiviteit: 973
Heb nog geen tijd gehad om alles aan te passen wegens de examens, maar zal het zo snel mogelijk proberen te doen :)

Moest ik er niet op tijd mee klaar geraken kan ik nog steeds gebruik maken van de database server van mijn school, dat is immers een MsSql server. Maar ik ga sowieso toch proberen om alles aan te passen naar MySql. Niet alleen heb ik dan nog steeds toegang tot mijn database als die van school offline is, maar het lijkt me ook een goede oefening :D

Thx voor alle info, heb al veel aan jou te danken! I owe you ;)
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #8 geschreven door thekid op donderdag 12 juni 2014 om 19:25:19.
thekid's avatar
Multiviteit: 5273
Moderator
Graag gedaan

Je kan ook de community edition van mysql installeren op je thuis pc (window/linux) indien je het wenst te testen alvorens je alles naar de server oplaad
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #9 geschreven door Ezio op vrijdag 13 juni 2014 om 15:32:07.
Ezio's avatar
Multiviteit: 973
Owkay, blijkbaar is er geen andere optie dan die MySql server van MijnHostingPartner (niet te verwarren met een datingsite trouwens) te gebruiken.
Mijn website draait immers op een shared ip adres waardoor de poort voor uitgaande database connecties dicht staat. :(

Dat verklaart wel de lage prijs van de webhosting. Goedkoop bij aankoop, maar later word je wel doodgegooid met addons... Nuja, zoals een (niet zo :p) wijze man ooit zei:

If it's too good to be true, it probably is
- Cdude -

Deze tekst werd het laatst bewerkt voor 0.86 % door Ezio op vrijdag 13 juni 2014 om 15:59:22.
I'm a gamer because I don't have a life... I've chosen to have many
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen