internet2107
Goto Top

Powershell - Hilfe bei Änderung von Werten in Datenbank

Ich rufe mit einer UI Werte einer Tabelle(Datenbank) ab. Die Ausgabe erfolgt in einem Datagridview.
Ebenso das Filtern von bestimmten Abfragen/Werten.
Das klappt alles soweit wunderbar.

Nun sollen jedoch auch Änderungen möglich sein. Möchte ich als Beispiel im Datagridview in einer Zelle einen Wert von "1" auf "0" ändern, und ist diese Zelle in der Zeile 5, Spalte 17, die Spalte (Column) hat den Text "Rights", so wäre der Commandbefehl zur DB:

$HostUpdateHostSQL = "UPDATE $tabelle_TT SET $columheader_name='0' WHERE id='123' "  

Zur Erläuerung:
$columheader_name ergibt in diesem Fall die angeklickte Spalte "Rights".


Mein Problem besteht nun darin, dass ich mich schwer darin tue, die enstprechende ID dieser Zeile zuzuordnen.
Mit anderen Worten, klicke ich als Beispiel die Spalte 17 an, ist das ja die Spalte "Rights". Die Zeile 5 umfasst einen bestimmten User. Diese Zeile hat Werte, wie z.B. ID, User, Rights, SetDate .....

Das Endergebnis soll sein, dass ich in der Zelle X den Wert ändern möchte und beim Submit verstanden wird, dass nur der Wert dieser Zelle der Zeile X und Spalte Y geändert wird. Er soll sich dabei ganz einfach auf die ID der Zeile beziehen. Denn ich schaffe es zwar der Tabelle die Änderung zu übermitteln, aber aktuell ändert er immer alle Werte von 1 auf 0 in der ganzen Spalte.

Hier mal ein Export der Datagridview-Ausgabe.
KEY ID RIGHTS User
5000759205 123 1 Denver
5000858206 181 0 Deborah

Content-ID: 344947

Url: https://administrator.de/contentid/344947

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

133883
Lösung 133883 31.07.2017 aktualisiert um 12:10:03 Uhr
Goto Top
Papperlapapp. Das macht man heute völlig anders, indem man die Daten der Datenbank über einen DataAdapter in eine Datatable lädt welche dann als Source des Datagridviews festgelegt wird. Mit dem Dataadapter macht man dann das Update, dieser kann autoomatisch feststellen was sich an der Tabelle geändert hat, und dies zu einer SQL Query zusammensetzen, das brauchst du nicht manuell machen!
Also hier mal lesen:
Aktualisieren von Datenquellen mit DataAdapters

Gruß exguru
internet2107
internet2107 31.07.2017 aktualisiert um 13:10:25 Uhr
Goto Top
Hier eine sinnvollere Erklärung, da für Powershell, aber danke. Meine Anfrage läuft über den DataAdapter, demnach muss nur etwas umgestellt werden.

https://blogs.msdn.microsoft.com/mwilbur/2007/02/26/updating-a-dataset-w ...

$ora_server = $textbox_Host_DB_TT.Text
	$ora_user = $textbox_User_DB_TT.Text
	$ora_pass = $textbox_Password_DB_TT.Text
	$ora_sid = $textbox_SID_DB_TT.Text
	$ora_port = $textbox_Port_DB_TT.Text
	$tabelle_TT = $combobox_Tabellenname_DB_TT.SelectedItem
		
	$ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=$ora_server)(Port=$ora_port)))(CONNECT_DATA=(SID=$ora_sid)));User ID=$ora_user;Password=$ora_pass"  
	
	$SQLCommand = "select * from $tabelle_TT"  
	#Amount,CountryID,ID,PackmaterialNo,Timecreated,Timelastmodified
	[Reflection.Assembly]::LoadFile($AssemblyFile)
	$OracleConnection = New-Object -TypeName Oracle.DataAccess.Client.OracleConnection
	$OracleConnection.ConnectionString = $ConnectionString
	$OracleConnection.Open()
	$OracleCommand = New-Object -TypeName Oracle.DataAccess.Client.OracleCommand
	$OracleCommand.CommandText = $SQLCommand
	$OracleCommand.Connection = $OracleConnection
	$OracleDataAdapter = New-Object -TypeName Oracle.DataAccess.Client.OracleDataAdapter
	$OracleDataAdapter.SelectCommand = $OracleCommand
	$DataSet = New-Object -TypeName System.Data.DataSet
	$OracleDataAdapter.Fill($DataSet)
	$ausgabe_TT = $DataSet.Tables
	$datagridview_auftrag_TT.DataSource = $ausgabe_TT
133883
133883 31.07.2017 aktualisiert um 13:15:53 Uhr
Goto Top
Powershell ist .NET lässt sich also fast 1:1 übernehmen von kleinen Syntaxänderungen mal abgesehen. Das Prinzip ist aber das gleiche.