[C#]Update SQL database werkt half?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 15:48

Stekeltje

Nothing to see here move along

Topicstarter
Ik ben voor mijn werk bezig met een beheer programma (dit programma is voor mij meer een probeersel om rustig bekend te geraken met C# en visual studio.)

Dit beheer programma maakt gebruik van een server based database die ik heb aangemaakt via visual studio.
De database is geconnect met een bindingsource binnen visual studio.

Mijn probleem waar ik echt niet uit kom is het volgende:
Ik heb een form waarin gebruikers, nieuwe apparaten kunnen toevoegen of 'oude' kunnen bewerken.
Het probleem:
Zodra ik bijvoorbeeld de naam van het apparaat verander (ik heb een typfout gemaakt en perongelijk al opgeslagen) dan pas ik dit aan, slaat hij op en geeft geen errors.
Dan sluit ik de form en druk ik op update in een gridview. Echter blijft de naam onveranderd.

Ik kijk of dat bij alle vlakken is, maar nee dat is niet zo als ik bijvoorbeeld in het aantekeningen tekstvak iets verander of toevoeg, dan veranderd hij die wel mee.

Mijn query naar de database:
C#:
1
2
3
4
5
6
7
8
                        sqlCon.Open();
                        SqlCommand update = new SqlCommand("UPDATE devicetable SET QisID ='" + qisIDTextBox.Text +
                                                                                "' , Devicename = '" + devicenameTextBox.Text +
                                                                                "' , Manufacturer = '" + manufacturerTextBox.Text +
                                                                                "'   WHERE QisID =    '" + qisIDTextBox.Text + "'", sqlCon);
                        update.ExecuteNonQuery();
                        MessageBox.Show("De bewerking is succesvol opgeslagen!", "Saved.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        sqlCon.Close();


Mijn vraag is, zijn jullie bekend met dit probleem en hoe kan ik het oplossen?

Overige informatie:
Ik gebruik visual studio 2010 ultimate
Ik gebruik een SQL database.
.NET 4.0

De database kan 3 keer voor 1 bepaald apparaat worden aangeroepen:
1 keer in een gridview bij het begin form

1 keer in een Uitgebreide informatie venster waarin mensen maar een aantal zaken kunnen aanpassen.

1 keer in een form waarin alles kan worden veranderd behalve de DatabaseID.

Acties:
  • 0 Henk 'm!

  • Hoogie2004
  • Registratie: Mei 2005
  • Laatst online: 13:29

Hoogie2004

Whohooooo

Heb je al rechtstreeks in de database gekeken naar de data?
Voer de gegenereerde query eens los uit op de database (dus even lezen via de debugger, en uitvoeren via de sql management studio), werkt deze zonder meldingen?

Je code lijkt verder correct, zeker omdat je aangeeft dat de andere wijzigingen wel doorkomen...

offtopic: (en waarschijnlijk overbodig) je begrijpt dat deze query gevoelig is voor SQL Injection?

My iRacing profile | Strava


Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 15:48

Stekeltje

Nothing to see here move along

Topicstarter
Hoogie2004 schreef op maandag 18 april 2011 @ 14:40:
Heb je al rechtstreeks in de database gekeken naar de data?
Voer de gegenereerde query eens los uit op de database (dus even lezen via de debugger, en uitvoeren via de sql management studio), werkt deze zonder meldingen?

Je code lijkt verder correct, zeker omdat je aangeeft dat de andere wijzigingen wel doorkomen...

offtopic: (en waarschijnlijk overbodig) je begrijpt dat deze query gevoelig is voor SQL Injection?
Ja ik ben er van bewust dat hij hiervoor gevoelig is.

Sql management studio, is dit een standaard functie binnen visual studio 2010? Ik ben namelijk nog niet zo heel gek lang bezig met het schrijven in C# (mijn eigen opleiding heeft hier ook niet veel mee te maken).

Acties:
  • 0 Henk 'm!

  • Hoogie2004
  • Registratie: Mei 2005
  • Laatst online: 13:29

Hoogie2004

Whohooooo

Stekeltje schreef op maandag 18 april 2011 @ 14:49:
[...]

Ja ik ben er van bewust dat hij hiervoor gevoelig is.

Sql management studio, is dit een standaard functie binnen visual studio 2010? Ik ben namelijk nog niet zo heel gek lang bezig met het schrijven in C# (mijn eigen opleiding heeft hier ook niet veel mee te maken).
De SQL Server Management Studio is een product om SQL Server mee te benaderen / managen. Deze is gratis te downloaden en ook onderdeel van de SQL Server / SQL Server Express edities. Hiermee kan je dus je database bekijken en ook query's uitvoeren op je database.

Zie: http://www.microsoft.com/...d1-4e3d-94b8-5a0f62bf7796

My iRacing profile | Strava


Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 15:48

Stekeltje

Nothing to see here move along

Topicstarter
Hoogie2004 schreef op maandag 18 april 2011 @ 14:55:
[...]


De SQL Server Management Studio is een product om SQL Server mee te benaderen / managen. Deze is gratis te downloaden en ook onderdeel van de SQL Server / SQL Server Express edities. Hiermee kan je dus je database bekijken en ook query's uitvoeren op je database.

Zie: http://www.microsoft.com/...d1-4e3d-94b8-5a0f62bf7796
SQL Server geeft als eerst al deze fout:
Afbeeldingslocatie: http://i102.photobucket.com/albums/m99/Ruudjuh_2006/errorServer.jpg

Terwijl dit eigenlijk niet klopt, aangezien ik via visual studio wel gewoon kan connecten met de database.

Acties:
  • 0 Henk 'm!

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 14:03
Ik zie geen transactie in je code?

Best kans dat je dan dus niet commit en dus niets vastlegt in de database.

Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 15:48

Stekeltje

Nothing to see here move along

Topicstarter
darkmage schreef op maandag 18 april 2011 @ 15:33:
Ik zie geen transactie in je code?

Best kans dat je dan dus niet commit en dus niets vastlegt in de database.
Hmm, kan je dit iets uitgebreider toelichten? Zoals ik al had gezegd ben ik nog maar een beginner en ben nog niet bekend met alle terminologie.

Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 23:36
darkmage schreef op maandag 18 april 2011 @ 15:33:
Ik zie geen transactie in je code?

Best kans dat je dan dus niet commit en dus niets vastlegt in de database.
Een transactie is niet verplicht hoor.

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 01-09 22:18
Probeer eens:

C#:
1
2
3
4
5
6
7
8
sqlCon.Open();
SqlCommand update = new SqlCommand("UPDATE devicetable SET Devicename = '" + 
devicenameTextBox.Text + 
"' , Manufacturer = '" + manufacturerTextBox.Text +
"'   WHERE QisID = '" + qisIDTextBox.Text + "'", sqlCon);
update.ExecuteNonQuery();
MessageBox.Show("De bewerking is succesvol opgeslagen!", "Saved.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
sqlCon.Close();

Acties:
  • 0 Henk 'm!

  • Hoogie2004
  • Registratie: Mei 2005
  • Laatst online: 13:29

Hoogie2004

Whohooooo

Stekeltje schreef op maandag 18 april 2011 @ 15:09:
[...]


SQL Server geeft als eerst al deze fout:
[afbeelding]

Terwijl dit eigenlijk niet klopt, aangezien ik via visual studio wel gewoon kan connecten met de database.
Als je probeert te connecten naar een .MDF database file, zie: MSDN: How to: Attach a Database (SQL Server Management Studio) dat werkt iets anders als een normale login op een SQL (Express) instance

My iRacing profile | Strava


Acties:
  • 0 Henk 'm!

  • Stekeltje
  • Registratie: November 2005
  • Laatst online: 15:48

Stekeltje

Nothing to see here move along

Topicstarter
Ik denk dat ik het probleem heb opgelost. Echter is er nog iets anders aan de hand.

Eerst de oplossing:
C#:
1
2
3
4
5
6
7
sqlCon.Open();
                        SqlCommand update = new SqlCommand("UPDATE devicetable SET QisID ='" + qisIDTextBox.Text +
                                                                                "' , Devicename = '" + +
                                                                                "'   WHERE DatabaseID ='" + databaseIDLabel1.Text + "'", sqlCon);
                        update.ExecuteScalar();
                        MessageBox.Show("De bewerking is succesvol opgeslagen!", "Saved.", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        sqlCon.Close();

Het probleem was (denk ik) als je QisID aanpaste dan kon hij deze niet meer vinden in de DB. Hierdoor, echter deed hij wel gewoon de Update (wat ik persoonlijk erg raar vind) daarom gebruik ik nu de databaseID die ik automatisch laat tellen en dus altijd een andere waarde heeft voor een apparaat.

Echter, als ik debug, en ik pas bijvoorbeeld QisID aan van QISMT14 naar QISMT0014 , dan past hij dit nu goed aan. Maar na enkele minuten veranderd hij terug naar de oude versie.
Google gaf dat zodra je Debugged dat hij de DB kopieert en daarmee gaat debuggen zodat je geen gegevens verlies hebt.

Wat wel echt veranderingen aanpast is een build werd toen gezegd. Ik heb toen dus gebuild en gerund zonder debug maar na enkele minuten was weer alles zoals vanouds. Is dit een fout in mijn database of als ik het programma nu release zal hij wel de DB goed updaten en bij houden?

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
sig69 schreef op maandag 18 april 2011 @ 16:03:
[...]

Een transactie is niet verplicht hoor.
Dat misschien niet, maar het klinkt wel als een transactie probleem. Of de wijzigende transactie is niet committed, of de lezende transactie ziet alleen de staat van voor de wijziging (bijvoorbeeld REPEATABLE READ)
Pagina: 1