login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[C#] Geeft == aan als ongelijk (Opgelost)

Offline larssy1 - 12/04/2010 14:44 (laatste wijziging 12/04/2010 15:01)
Avatar van larssy1MySQL beginner Hoi,

Ik ben bezig met een C#, en nu zit ik met een vaag dom probleempje.. 
Het is niet zozeer ernstig, maar enkel dom en ik snap niet waarom het is..

De applicatie zit namelijk dit:
  1. if (appVersion.Read())
  2. {
  3. if(appVersion["version"] != Properties.app.Default.ver)
  4. {
  5. MessageBox.Show("There is a new update available!"+
  6. Environment.NewLine + appVersion["version"] + Environment.NewLine +
  7. Properties.app.Default.ver);
  8. }
  9. else
  10. {
  11. MessageBox.Show("Valid version");
  12. }
  13. }

beide waarden zijn 1.0.1 (in de database als een nChar(10) veld type.)
en in de app.settings bestand, staat er 1.0.1.

Echter ziet hij deze 2 waarden als verschillend, en geeft hij aan dat er een nieuwe versie beschikbaar is..

Iemand een idee??

Greetz,
Lars



-------------
volgens mij ligt het aan diverse dingen. als ik de versie bij 1 van de twee veranderd, geeft hij alsnog aan dat er een nieuwe versie beschikbaar is..

Wat er dus ook staat en of ze verschillen of gelijk zijn..

Kan dit worden veroorzaakt omdat het type veld in de database nchar(10) is?

20 antwoorden

Gesponsorde links
Offline Koen - 12/04/2010 15:01
Avatar van Koen PHP expert Properties.app.Default.ver.toString() geprobeerd?
Offline larssy1 - 12/04/2010 15:06
Avatar van larssy1 MySQL beginner Yep, geeft het zelfde probleem
Offline lemoinet - 12/04/2010 15:07
Avatar van lemoinet PHP gevorderde zet er een breakpoint en kijk wat het verschil is
Offline larssy1 - 12/04/2010 15:12 (laatste wijziging 12/04/2010 15:26)
Avatar van larssy1 MySQL beginner Ik dacht dat ik het probleem had gevonden, omdat nchar(10) nog iets van 5 lege spaties achter de waarde neerzet.
Dit heb ik toen geconverteerd naar Varchar(50) omdat deze gewoon goed is.

Nu zie ik dus compleet geen verschil meer, en ook niet visueel..

zie screenshot
http://img228.i...mloosn.png

--------
resultaat breakpoint: (system.diagnostics.debugger.break)

Deze heeft een gele pijl:
> WindowsFormsApplication2.exe!WindowsFormsApplication1.updater.updater_Load(object sender = {WindowsFormsApplication1.updater, Text: updater}, System.EventArgs e = {System.EventArgs}) Line 44 + 0x5 bytes

Deze twee staan er ook, maar zonder gele pijl
WindowsFormsApplication2.exe!WindowsFormsApplication1.frmLogin.btnLogin_Click(object sender = {Text = ""}, System.EventArgs e = {X = 27 Y = 25 Button = Left}) Line 64 + 0xa bytes
--------------------------------------------------
WindowsFormsApplication2.exe!WindowsFormsApplication1.Program.Main() Line 18 + 0x1d bytes
Offline cx1213 - 12/04/2010 15:50 (laatste wijziging 12/04/2010 15:51)
Avatar van cx1213 Lid text kan je niet zomaar vergelijken dat moet via een funtie http://csharp.n...ompare.htm
Offline larssy1 - 12/04/2010 16:33 (laatste wijziging 13/04/2010 16:06)
Avatar van larssy1 MySQL beginner Kan niet, de fout ligt bij de data uit de database.

ik kan text perfect met Properties.app.default.ver vergelijken,

maar niet text met de database input..
Werkt ook niet mbv van Equals

Dit werkt dus niet:
  1. object newversie = null;
  2. string curversie = null;
  3.  
  4. newversie = appVersion["version"];
  5. curversie = "1.0.1";
  6.  
  7. if(string.Equals(newversie, curversie))
  8. {
  9. //System.Diagnostics.Debugger.Break();
  10.  
  11. MessageBox.Show("There i.s a new update available!"+
  12. Environment.NewLine + "new version ("+appVersion["version"]+")" +
  13. Environment.NewLine + "current ("+Properties.app.Default.ver+")");
  14. }
  15. else
  16. {
  17. MessageBox.Show("Valid version");
  18.  
  19. frmLogin Login = new frmLogin();
  20. Login.Hide();
  21. }
Offline Ultimatum - 13/04/2010 07:21
Avatar van Ultimatum PHP expert Er is een class Version, gebruik deze ipv strings.

http://msdn.mic...rsion.aspx
Offline larssy1 - 13/04/2010 10:49 (laatste wijziging 13/04/2010 11:24)
Avatar van larssy1 MySQL beginner ´t zal wel aan mij liggen, maar ´t lukt me niet om het werkent te krijgen, ook niet met de class..
Offline Ultimatum - 13/04/2010 16:37 (laatste wijziging 13/04/2010 16:37)
Avatar van Ultimatum PHP expert
  1. Version newestVersion = new Version("1.0.0");
  2. if (newestVersion > Assembly.GetExecutingAssembly().GetName().Version) {
  3. // Nieuwe versie
  4. }


Assemby version vind je in Visual studio door rechtermuisknop op je project te doen > application > assembly information en dan staat op dat scherm iets onder het midden Assembly Version. Of in het bestand AssemblyInfo.cs die in Properties map staat waar al je code staat.

Je kan Assembly ook wijzigen door nog een Version object.
Offline larssy1 - 13/04/2010 16:45
Avatar van larssy1 MySQL beginner Dat snap ik.
Maar het punt is. Ik heb de naam van de nieuwe versie in de MSSQL database staan, omdat ik niet bij de clienten handmatig in hun applicatie de versie aan kan passen natuurlijk.

Daarom staat hij in mijn MSSQL zodat ik het zelf alles tegelijk kan aanpassen, zodat ze een melding krijgen dat er een nieuwere versie is.

Hierbij is het probleem dat de Versie variabel geen MSSQL objecten toelaat.
Offline Ultimatum - 13/04/2010 17:14 (laatste wijziging 13/04/2010 17:15)
Avatar van Ultimatum PHP expert Je haalt de versie op uit de MSSQL database en slaat het op als string? Dan kan je die string gebruiken in de constructor van Version object. En heb je mijn code al geprobeerd, kijken of dat werkt want daar ging het juist om.
Offline larssy1 - 13/04/2010 18:58
Avatar van larssy1 MySQL beginner Je kunt mssql data niet opslaan in een string, alleen als een object
Offline Ultimatum - 14/04/2010 11:48
Avatar van Ultimatum PHP expert Je kan de objecten die je terug krijgt wel omzetten naar string en volgens mij zijn er zelfs methode die data uit tabel halen en al omzetten naar een datatype.
Offline larssy1 - 14/04/2010 12:45 (laatste wijziging 14/04/2010 12:47)
Avatar van larssy1 MySQL beginner ben benieuwd hoe jij 'm dan omzet naar een string =) dat kan namelijk niet, omdat een (var)char veld geen string kan zijn =)

En anders ben ik zeer benieuwd naar een voorbeeldje van je 
het liefst een voorbeeld dat ik zo kan implementere 

hier mijn stukje code. mocht je de opbouw willen weten..
  1. object newversion = appVersion["version"];
  2. object curversion = Properties.app.Default.ver;
  3.  
  4. try
  5. {
  6. if (curversion.Equals(newversion))
  7. {
  8. MessageBox.Show("Valid version");
  9.  
  10. frmLogin Login = new frmLogin();
  11. Login.Hide();
  12.  
  13. Main main = new Main();
  14. main.Show();
  15. }
  16. else
  17. {
  18. MessageBox.Show("There is a new update available!" +
  19. Environment.NewLine + "new version (" + appVersion["version"] + ")" +
  20. Environment.NewLine + "current (" + Properties.app.Default.ver + ")");
  21. }
  22. }
  23. catch(Exception ex)
  24. {
  25. MessageBox.Show(ex.Message);
  26. }
Offline Ultimatum - 14/04/2010 14:43
Avatar van Ultimatum PHP expert Uhmm.. een varchar is een string object in C#. En waar haal je de data op uit de database want aan bovenstaande code heb ik niets.
Offline larssy1 - 14/04/2010 16:12 (laatste wijziging 14/04/2010 16:19)
Avatar van larssy1 MySQL beginner kan zijn dat er wat foutjes in zitten, heb even snel in kladblok getypt.

Versie 1:
foutmelding:
Met 2 verschillende waardes geeft hij de melding: Valid!
(dit klopt niet in de if, waarde van AppVersion is niet te vergelijken met die van Properties.)
  1. SqlConnection myConnection = new SqlConnection("Data Source=[myip]\\SQLEXPRESS, 1433; user=[myuser]; password=[mypassword]; database=[mydatabase]");
  2.  
  3. myConnection.Open();
  4.  
  5. try
  6. {
  7. SqlDataReader appVersion = null;
  8. SqlCommand verCheck = new SqlCommand("SELECT version FROM AppInfo", myConnection);
  9. appVersion = verCheck.ExecuteSqlReader();
  10.  
  11.  
  12. if (appVersion.Read())
  13. {
  14. if(appVersion["version"] != Properties.app.Default.ver)
  15. {
  16. MessageBox.Show("There is a new update available!"+
  17. Environment.NewLine + appVersion["version"] + Environment.NewLine +
  18. Properties.app.Default.ver);
  19. }
  20. else
  21. {
  22. MessageBox.Show("Valid version");
  23. }
  24. }
  25.  
  26. }
  27. catch(Exception ex)
  28. {
  29. MessageBox.Show(ex.Message);
  30. }


Versie 2:
foutmelding:
Object reference not set to an instance of an object
  1. SqlConnection myConnection = new SqlConnection("Data Source=[myip]\\SQLEXPRESS, 1433; user=[myuser]; password=[mypassword]; database=[mydatabase]");
  2.  
  3. myConnection.Open();
  4.  
  5. SqlDataReader appVersion = null;
  6. SqlCommand verCheck = new SqlCommand("SELECT version FROM AppInfo", myConnection);
  7. appVersion = verCheck.ExecuteSqlReader();
  8.  
  9. appVersion.Read();
  10.  
  11. object newversion = appVersion["version"];
  12. object curversion = Properties.app.Default.ver;
  13.  
  14. try
  15. {
  16. if (curversion.Equals(newversion))
  17. {
  18. MessageBox.Show("Valid version");
  19.  
  20. frmLogin Login = new frmLogin();
  21. Login.Hide();
  22.  
  23. Main main = new Main();
  24. main.Show();
  25. }
  26. else
  27. {
  28. MessageBox.Show("There is a new update available!" +
  29. Environment.NewLine + "new version (" + appVersion["version"] + ")" +
  30. Environment.NewLine + "current (" + Properties.app.Default.ver + ")");
  31. }
  32. }
  33. catch(Exception ex)
  34. {
  35. MessageBox.Show(ex.Message);
  36. }
Offline lemoinet - 14/04/2010 16:18 (laatste wijziging 14/04/2010 16:18)
Avatar van lemoinet PHP gevorderde dan zou je ze zo toch moeten kunnen vergelijken

appVersion["version"].ToString().Equals(curversion.ToString())
Offline larssy1 - 14/04/2010 16:24 (laatste wijziging 14/04/2010 16:35)
Avatar van larssy1 MySQL beginner Zal zo even proberen.
Heb momenteel probleem met mijn mssql server.
1 momentje
-----------------
Object reference not set to an instance of an object -- komt opdagen
http://plaatscode.be/139122/
Offline lemoinet - 14/04/2010 16:38 (laatste wijziging 14/04/2010 16:39)
Avatar van lemoinet PHP gevorderde ligt waarschijnlijk aan curversion. kijk eens welk type Properties.app.Default.ver is.

maak er anders "var curversion" van
Offline larssy1 - 14/04/2010 16:45 (laatste wijziging 14/04/2010 17:38)
Avatar van larssy1 MySQL beginner Heb die onderhand opgelost.

Ik heb nu die string als het volgende
String curversion = System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString();

Nu krijg ik alleen een foutmelding van "Invalid attempt to read data, while no data is present".

dus ik ga wat kleine testjes uitvoeren kwa data, (zelf waardes geven) en kijken bij welke hij blijft happeren, en welke goed werkt.

De foutmelding ligt tenminste al een plekje hoger (bij de laatste try dit keer)
---------
Hmm, de foutmelding "Invalid attempt to read data, while no data is present".
werd weergegeven omdat ik was vergeten de volgende regel toe te voegen:
myReader.Read();

Echter zit ik nu wel weer met die "instance of an object " error.
---------
Nu heb ik het opgelost, dat mijn originele Versie 1 wel weer werkt, maar met de neiuwe manier erachter, geeft hij als ze gelijk zijn.. Valid aan, maar ongelijk, dan de instance of object error.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.199s