Laden...
A
Benutzerbeschreibung
Hier können Sie einen kurzen informativen Text eingeben, der in Ihrem Profil dargestellt werden soll.

Forenbeiträge von Afrokalypse Ingesamt 452 Beiträge

19.07.2006 - 11:37 Uhr

ich habe gerade in der hilfe die eigenschaft VerticalScrollBar der klasse DataGridView gefunden. diese ist geschützt. leider kann ich von meiner dgv gar nicht auf die eigenschaft zugreiffen. das würde mir aber schon helfen.

wie kann ich auf diese eigenschaft zugreiffen?

*EDIT*
habs gefunden. in den ScrollEventArgs gibt es ne eigenschaft OldValue und NewValue.

19.07.2006 - 10:00 Uhr

hi leute,
ich habe mir eine datagridview in der ich zeiten speicher. die zeiten werden wie folgt in die datagridview integriert:

beim scrollen nach unten wird, wenn man bei einer bestimmten position angekommen ist, das erste element der datagridview gelöscht und am ende ein neues angehängt.

beim scrollen nach oben verläuft diese prozedur genau anders herum.

wenn ich nun anfangs einen festen bereich von 300 einträgen lade und dann scrolle und meinetwegen das 301. element innerhalb der datagridview im sichtbaren bereich erscheint, dann ist die scrollbar ganz unten. ich kann zwar weiter hinunterscrollen indem ich auf den pfeil klicke aber das ist unschön.

wie kann ich die scrollbar aktualisieren, sodass zB der scrollbalken kleiner wird wenn die nächsten elemente geladen werden?

was für andere möglichkeiten habe ich?

mfg
Afr0

18.07.2006 - 15:09 Uhr

ja das wär durchaus möglich aber ich hab eigentlich darauf gehofft, dass es schon eine fertige lösung gibt 😠

18.07.2006 - 14:56 Uhr

dgv.Rows.Count wird mir aber doch alle rows aufzählen und nicht nur die innerhalb meines fensters oder?

also angenommen innerhalb meines fensters (Vollbild) können 50 rows angezeigt werden (was ich im vorhinein nicht weiß), in meiner dgv sind aber 1000. wie komme ich nun an die anzahl der derzeit angezeigten elemente?

wenn ich nun das fenster verkleiner möchte ich auch die neue anzahl an angezeigten elementen innerhalb des fensters wissen. ich möchte NICHT wissen, wieviele elemente ich allgemein habe 🙂

ich habe nur das datagridview sonst nix.

18.07.2006 - 14:31 Uhr

Hi Leute,
gibt es eine möglichkeit, die anzahl der elemente eines datagridviews zu erhalten, die derzeit innerhalb des fensters angezeigt werden? ich weiß gerate zufällig dass es bei mir 51 sind (nachgezählt) aber mir wärs lieber wenn man das abfragen kann 😁

mfg
Afr0

18.07.2006 - 12:30 Uhr

hi leute. ich würde gern mal wissen, wie es grundlegend funktioniert, 3d objekte unter directx zu programmieren.

kleines beispiel: wir haben das ballerspiel xy in dem es menschen und monster gibt. wie werden hier zB komplexere bewegungsabläufe erstellt, wie zB das bewegen der arme oder so?

ich kenne ein 3d grafikprogramm namend cinema 4d. dazu habe ich gelesen, dass solche 'models' dort zB erstellt werden können. wird das bei directX programmierung auch so gemacht? also benutzt man zB c4d um solche models in das geschriebene programm zu integrieren? und werden die bewegungsabläufe über solch ein grafikprogramm erstellt? oder sind das selbst geschriebene codeteile?

wer kann mich dazu mal ein wenig aufklären oder mir links/tutorials/referenzen dazu geben? 8o

mfg
Afr0

10.07.2006 - 12:24 Uhr

ich habe 2 konstruktoren in denen ich die parameter dateiname und puffergröße setzen will. den rest will ich in der methode init initialisieren. allerdings ruft die methode eine weitere methode auf, in der ich schon mit der puffergröße arbeiten muss. wenn die aber nicht gesetzt ist (da ja sofort der standardkonstruktor aufgerufen wird) würde ich hier eine exception erhalten. ich kann natürlich auch in den beiden konstruktoren die methode init aufrufen aber das fand ich nicht so schön 🙂 naja wenns nicht anders geht, dann mach ich es halt wieder so.

10.07.2006 - 11:52 Uhr

hi leute,
es gibt ja die möglichkeit, konstruktoren zu überladen und auch mehrere konstruktoren aufzurufen.

zB:

public MyKontruktor()
{
...
}
public MyKonstruktor(string text) : this()
{
....
}

hier wird, wenn ich den kontruktor mit parametern aufrufe, sofort in den standardkonsturktor gesprungen.

kann ich die reihenfolge auch ändern? hintergrund ist folgender:
ich habe eine methode init(), die mir mehrere variablen initialisiert. diese sollen aber erst initialisiert werden wenn die kontruktoren abgearbeitet wurden. die methode init möchte ich aber vom standardkonstruktor aus aufrufen.

26.05.2006 - 16:41 Uhr

danke, herbivore 🙂
hab das (glaube ich zumindest g) hinbekommen so wie ich es mir in etwa vorgestellt habe ^^

26.05.2006 - 15:15 Uhr

ich habe mich wahrscheinlich etwas ungenau ausgedrückt.
ich möchte den bereich im array von array[0] bis zum ersten zeilenumbruch innerhalb des arrays in das 2. array schreiben. es können aber durchaus mehrere zeilenumbrüche vorkommen.

oder verstehe ich dich da irgendwie falsch? 🤔

26.05.2006 - 14:14 Uhr

oh ich hab mich ein wenig vertan. ich arbeite mit einem byte-array. da komme ich auch nicht drum herum, da ich ja meine datei rückwärts lesen muss... habe ich mal in einem anderen thread angesprochen. daher das array.

26.05.2006 - 14:04 Uhr

hallo herbivore,
dh: ich speichere den bereich in einen substring und wandel den dann in ein char-array um?

26.05.2006 - 14:01 Uhr

kann man nicht auch in einigen fällen

if(...)
{
...
}
else
{
throw new Exception();
}

oder so benutzen? weil try / catch ist ja doch recht langsam im verhältnis zu if / else

🤔

26.05.2006 - 13:55 Uhr

hi leute.
ich hab eine relativ einfache frage, hab aber irgendwie ne denkblokade 🙁
folgendes: ich habe 2 char-arrays

array1 erhält 1024 zeichen text. befindet sich an stelle von array[0]+array[1] ein "\r\n"
oder an stelle von array[0] ein "\n" (nur im fall von dateien im unix-format, getrenntes "\r\n" darf nicht angenommen werden) so soll das array weiter verarbeitet werden.

wenn sich an der stelle etwas anderes befindet, soll der bereich von array[0] bis array[stelle wo "\r\n" oder nur "\n"] an das 2. array übergeben werden.

die einfachste lösung wäre bestimmt einfach eine for-schleife und dann alle array-elemente prüfen. aber geht das nicht auch einfacher/besser?

dazu kommt dann noch, dass ich nicht weiss, wie ich jetzt diesen bereich von array 1 nach array 2 bekommen soll... oO

mfg Afr0

17.05.2006 - 14:44 Uhr

ok ich bin ein holzkopf 😁

ich denke mal anders als dass ich den block in nen string array packe und nach \n unterteile wirds halt nicht gehen^^ ich dachte da gäbe es noch ne andere möglichkeit.... oder gibts doch eine?

17.05.2006 - 14:29 Uhr

hi leute
beim rückwärts lesen der datei ergeben sich bei mir einige problemchen 😉


StreamReader sr = new StreamReader(@"c:\bla.txt",Encoding.Default);
char[] text = new char[1024];

for (long offset = sr.BaseStream.Length - text.Length; offset > -1; offset -= text.Length)
{
sr.BaseStream.Seek(offset, SeekOrigin.Begin);
sr.ReadBlock(text, 0, text.Length);
//consolenausgabe oder so
}

dass die datei so nicht komplett geladen werden kann ist mir wohl bewusst 😉

mir geht es erstmal um etwas anderes:

wie man sieht lese ich immer einen block von 1024 zeichen. wenn ich diese ausgeben will dann stehen die blöcke verkehrt herum untereinander was den sinn des textes total durcheinander bringt^^. allerdings muss ich halt mit dem letzten block anfangen und mit dem ersten aufhören.

ich würde gerne zeilenweise arbeiten. hat da jemand ne idee wie sich das umsetzen lässt? 🤔

15.05.2006 - 12:38 Uhr

hallo leute 🙂
sorry dass ich mich erst so spät wieder melde aber bin arbeitstechnisch ein wenig ausgelastet ^^

also: @herbivore: ich muss die datei rückwärts lesen, weil es sich um eine log-datei handelt und die letzten einträge zuerst in meinem programm aufgelistet werden sollen.

das ganze soll in form einer 2thread architektur gelöst werden. dabei wird thread1 an das ende der datei gesetzt und thread2 rückwärts durch die datei laufen. t1 kann t2 beliebig starten und stoppen.

so soll im endeffekt nur ein gewisser teil der datei geladen werden und gleichzeitig die position in der datei festgehalten werden.

11.05.2006 - 09:56 Uhr

hallo plongo,
ich verstehe nicht ganz wie du das meinst.
ich muss ja erstmal an die letzte zeile meiner datei herankommen. wenn ich da bin wird der rest wahrscheinlich nicht so schwer werden.

11.05.2006 - 08:58 Uhr

hallo ihr beiden 🙂
danke erstmal für die ausführlichen antworten.
zu der größe: es können durchaus textdateien mit 300mb sein. von daher möchte ich diese nicht komplett in dem speicher halten.

die idee war eigentlich so, dass ich zB einen zeiger auf die letzte zeile in der datei setze.
aber wenn ich euch richtig verstanden habe, komme ich nicht um das einlesen der kompletten datei herum, oder?

...hättest du also bei FileStreams die Chance die Länge abzufragen, mittels Seek() an die entsprechend Stelle zu gehen, ein Zeichen (!) zu lesen und dann den Cursor weiter nach vorne zu setzen.

ich hab die möglichkeit, die größe der datei abzufragen. wäre es dann nicht möglich meinen reader an das letzte byte in der datei zu setzen?

10.05.2006 - 14:48 Uhr

hi leute,
gibt es eine möglichkeit von unten nach oben in einer textdatei zu lesen?

hab bei streamreader / textreader etc... jetzt auf anhieb nichts gefunden oder vllt übersehen.... und hier über die suche auch nicht.

mfg
Afr0

28.04.2006 - 15:19 Uhr

hat niemand eine idee wie das kommt bzw was man dagegen machen kann?

27.04.2006 - 16:10 Uhr

hi leute,
ich habe eine windowsform deren eigenschaften wie fensterbreite, fensterhöhe, größe etc... ich in eine xml-datei als einstellungen speicher und lade.
das sieht wie folgt aus:


public void speicherEinstellung(string filename)
		{           
			FileStream fs;			
			if(!File.Exists(filename))
			{
				fs = File.Create(filename);
				fs.Close();
				fs = null;
			}            
			fs = new FileStream(filename,FileMode.Open);
			XmlTextWriter xmlWriter = new XmlTextWriter(fs, Encoding.Default);			
			xmlWriter.WriteStartElement("Einstellungen");					xmlWriter.WriteElementString("Fensterhoehe",this.Height.ToString());
xmlWriter.WriteEndElement();
xmlWriter.Close();
xmlWriter = null;
}
public void ladeEinstellung(string filename)
		{            
			if(File.Exists(filename))
			{
                XmlTextReader reader = new XmlTextReader(filename); 	
				try
				{                    
					reader.ReadStartElement("Einstellungen");			
							this.Height = XmlConvert.ToInt32(reader.ReadElementString("Fensterhoehe"));
reader.ReadEndElement();
reader.Close();
reader = null;
}catch(System.Xml.XmlException e)
				{
                    reader.Close();
                    reader = null;
					MessageBox.Show(e.Message);                   
				} 
}		

wenn ich nun eine einstellung bei buttonklick werden einstellungen gespeichert und bei einem klick auf einen anderen button geladen.

wenn ich nun meine form von einer beliebigen position aus nach oben links bewege und dann speichern will, wird meine xml-datei richtig angelegt bis auf das letzte zeichen. am ende steht dann plötzlich </Einstellungen>>

wenn ich die form wieder weiter nach unten rechts bewege und neu speichere dann wird dieser fehler wieder überschrieben.

ich versteht nicht wie es zu dem fehler kommt.
hier die fehlermeldung: 'ungültige daten auf stammebene. zeile 1 position 267'

weiss jemand warum das passiert und was ich dagegen machen kann?

mfg
Afr0

13.04.2006 - 15:12 Uhr

hi leute,
ich möchte gerne mit der scrollbar die in der listview gegeben ist, beim scrollen einerseits die aktuelle position der scrollbar haben und andererseits das zu der position gehörende element auswählen.

bei einer vscrollbar kann man ja zb über value das zu selektierende element der listview angeben. aber die scrollbar der listview scheint ja so etwas nicht zu bieten.

und die scrollbar der listview kann ich ja auch nicht unsichtbar machen...
weiss jemand wie ich das am besten angehen könnte?

mfg
Afr0

12.04.2006 - 11:35 Uhr

ich glaub ich habs jetzt 🙂
danke an euch beide!

noch etwas zu den ressourcen:
in der deutschen vs2003 version wird man (so wie es in der doku beschrieben ist)
keinen menüpunkt 'ressource hinzufügen' finden. es heisst dort 'element hinzufügen'.

hat mich vorhin etwas verwirrt 😁

mfg
Afr0

12.04.2006 - 09:38 Uhr

vllt sollte ich noch sagen, dass ich framework 1.1 benutze...

12.04.2006 - 09:21 Uhr

hi leute,
ich habe einige .png-dateien die ich zB als icons für mein menü benutze. diese möchte ich aber nicht in einem extra ordner liegen haben sondern fest ins programm einbinden. zB als dll oder so. leider weiss ich gar nicht wie ich das machen könnte oder wonach ich suchen sollte.
alphablending muss noch gegeben sein und ich muss noch auf die einzelnen icons zugreiffen können (zB für dynamisch anzeigen)

wie mache ich das am besten?

mfg
Afr0

10.04.2006 - 12:03 Uhr

hi leute,
ich wusste jetzt nicht ob dieses forum oder forms besser wären. aber eigentlich geht es ja mehr um threads an sich als um forms.

also:
ich habe ein einfaches beispiel geschrieben, in dem ich eine textdatei lese und den text zeilenweise in einer listview eintrage.
der ablauf soll synchron verlaufen, dh: erst den text lesen und zeilenweise in ein array schreiben und danach listviewitems anlegen.

nachdem ich die textdatei in einem thread abgearbeitet habe rufe ich die methode
invokeMethode();
auf. hier steht nichts weiter als:

fillViewDelegate = new FillViewDelegate(this.fuelleListView);
this.fillViewDelegate.BeginInvoke(this.fsearch.Zeilen,null,null);

fsearch.Zeilen ist hierbei das array mit den textzeilen. fuelleListView ist die methode, in der ich die listviewitems erstelle.

bei diesem aufruf funktioniert alles wie geplant. ich kann sehen wie jedes einzelne item angelegt wird. allerdings bekomme ich hier das problem, dass ich nicht den laufenden thread stoppen kann, weil ich auf dem hauptthread arbeite... (zumindest scheint es so, da meine form verschwindet)

wenn ich nun nach meinem text-lese-thread einen weiteren thread starte und in diesem meine invokeMethode() aufrufe und den thread mit abort abbrechen will, verschwindet meine form auch...

allerdings gibt es ja noch die möglichkeit, bestimmte controls per invoke aufzurufen. hier kann ich allerdings machen was ich will: die form friert immer ein.
ich habe es mit beiden oben genannten varianten ausprobiert aber es passiert immer das gleiche.

meine frage daher: wo ist in dem fall der denkfehler, wenn ich anstatt delegate.begininvoke
control.invoke
benutzen möchte?

ich hoffe das ist einigermaßen verständlich 🙂
mfg
Afr0

03.04.2006 - 10:44 Uhr

hi leute 🙂
ich hab mal wieder ein kleines outlook problem.
man hat ja die möglichkeit, termine als mail zu verschicken (zB als besprechungstermin) ebenso kann man auch aufgaben, etc.. als mail verschicken.
ich möchte genau diese objekte abfangen. mein programm durchsucht alle mailitems und soll sie mir in ner listview darstellen. bei terminen zB bekomme ich dann probleme. wie kann ich solche mailitems abfangen bzw herausfinden, dass es sich dabei um einen termin / eine aufgabe etc... handelt? wenn ich zB gettype abfrage erhalte ich nur ComObject.....

*EDIT*
ich habe herausgefunden, dass man von einem MailItemper mailItem.Class
auf olObjectClass zugreifen kann. hier erhalte ich aber trotzdem immer den typ olMail und nicht wie erhofft olAppointment oder so...

*EDIT2*
hat sich erledigt 🙂 ich musste nur die for-schleife ändern und im nachhinein abfragen ob object = MailItem 😉

03.04.2006 - 10:26 Uhr

das sieht doch gut aus 🙂
danke!

30.03.2006 - 09:00 Uhr

gibt es anleitungen im netz, die sich damit auseinandersetzen? ich suche schon einige zeit aber finde nicht so wirklich was dazu was mir weiterhelfen kann.

würde mich über jeden link freuen 🙂

mfg
Afr0

29.03.2006 - 16:25 Uhr

hi leute,
ich habe ein add-in für outlook unter c# geschrieben. dieses soll nun vom exchange-server an alle client-pc's verteilt werden. also jeder der outlook startet soll das add-in (oder die aktuelle version davon) erhalten, sofern er rechte dazu besitzt.

ich hab schon gegoogelt, finde aber nicht wirklich was zu dem thema. könnt ihr mir anhaltspunkte, links tipps etc... dazu geben?
würde mich sehr darüber freuen.
mfg
Afr0

15.03.2006 - 16:17 Uhr

ich werf mal was in den raum:

bitmaps sind pixelgrafiken (wenn ich mich nicht irre). bei extremen kurven oder so werden wahrscheinlich nur noch pixel angezeigt werden können. ausser man macht dickere linien. bei vektorgrafiken sind keine 'pixel' vorhanden. wenn du deine linien als vektoren zeichnen kannst, dann versuch das mal. ansonsten halt dickere linien zeichnen.

10.03.2006 - 15:32 Uhr

hat sich erledigt. ich musste das datetime abändern. dt.toshortdatetime...

10.03.2006 - 13:50 Uhr

hi leute,
ich habe eine tabelle in meiner oracle-datenbank, in die ich diverse zeilen schreibe. in einer spalte dieser tabelle kommt ein datum vor.

der primärschlüssel besteht aus einem namen, dem datum und einer laufenden nummer, die ich von hand erhöhen möchte.

deshalb sieht meine select-anweisung wie folgt aus:

this._oracleCommand = new OracleCommand("Select * from TABELLE where USER1 = '"+myName.ToUpper()+"' and USER2 = '"+dt.Date+"' order by USER3",this._oracleConnection);

wenn ich nun per OracleDataAdapter die fill-methode auf mein dataset anwenden möchte bekomme ich einen ORA-01830-error:

'Eine nicht behandelte Ausnahme des Typs 'System.Data.OracleClient.OracleException' ist in system.data.dll aufgetreten.
Zusätzliche Informationen: ORA-01830: Datumsformatstruktur endet vor Umwandlung der gesamten Eingabezeichenfolge'

wenn ich es richtig verstehe, dann müsste das datumsformat, welches ich übergebe, nicht mit dem format auf datenbankseite übereinstimmen.

wie kann ich über das framework 1.1 das datumsformat der datenbank abfragen?
wenn es nicht am datumsformat liegt, woran liegt es dann und wie kann ich nun ins dataset bzw datatable schreiben, damit ich die laufende nummer heraus bekomme?

mfg
Afr0

03.03.2006 - 10:42 Uhr

ich habe das jetzt auch noch mal ausprobiert. hatte allerdings vorher den dataadapter erstellt, da ich die werte aus der datenbank ja zwischenspeichern wollte. beim ändern der zeile benutze ich den dataadapter einfach nicht.

hab also neuen command erstellt und bin so vorgegangen wie du sagtest. daraufhin habe ich nun einen: 'ORA-00936: Ausdruck fehlt' error bekommen. 🙁

*EDIT*

habs jetzt hinbekommen 🙂 danke noch mal für die tipps.

ich musste die update-anweisung noch mal ändern. mit dem 'update tabelle set row = row(...) ' kam er irgendwie nicht zurecht. naja jetzt klappts 🙂

02.03.2006 - 17:08 Uhr

dann erhalte ich keine verbindung... also ich hab jetzt nen neuen oledbcommand, connection adapter etc... aber das hilft gar nicht...

langsam verzweifel ich hier 🙁

02.03.2006 - 16:41 Uhr
oracleCmdBuilder.GetUpdateCommand().CommandText = "UPDATE IMPORT SET ROW = ROW("+this._archiv+", "+this._vol_nr+", "+this._max_size_kb+", "+this._akt_size_kb+", "+this._akt_size_carry+", "+this._location+", "
										   +this._last_dir+", "+this._next_file+")WHERE ARCHIV= "+this._archiv;
02.03.2006 - 16:22 Uhr

hilft aber alles nix. habe jetzt noch mal versucht, der datatable nen primarykey zu übergeben und mit executenonquery den updatecommand zu benutzen aber klappt nciht. ich werde jetzt noch mal versuchen, die spalten einzeln zu ändern. also ohne itemarray 🙂

02.03.2006 - 14:43 Uhr

kein problem 🙂 ich hab mich auch nicht gerade klar genaug ausgedrückt 😉

also beginedit und endedit habe ich nicht benutzt werde ich aber mal machen.
hoffentlich hilfts 😉

*EDIT*

Daran lags auch nicht. ich erhalte immer noch gleiche fehlermeldung.
kann es was damit zu tun haben, dass ich nach dem füllen der DataTable die datenbankverbindung einfach offen lasse?

mfg
Afr0

02.03.2006 - 14:33 Uhr

ich hab das eigene update command erst geschrieben als ich bemerkt habe, dass der commandbuilder alleine nicht funktioniert. außerdem wüsste ich nciht, warum mein update command falsch sein sollte. das habe ich so aus einem buch übernommen. so kann man die ganze zeile direkt ändern ohne 'attributname = wert'
*EDIT*
das update command war sogar falsch. es heisst:
'UPDATE Tabelle1 SET ROW = ROW(wert1, wert2, .....) WHERE erstespalte= 3'

hier mal etwas code vllt sagt das ja etwas aus.


//Datenbankverbindung ist offen
public void checkImport()
{				
     this._oracleCommand = new OracleCommand("select * from import",_oracleConnection);
     this._oracleDataAdapter = new OracleDataAdapter(this._oracleCommand);
     this._dataSet = new DataSet();
     this._oracleDataAdapter.Fill(this._dataSet,"Import");
     this._import = this._dataSet.Tables["Import"];
.....
}

//Daten ändern. myItemArray ist mit werten gefüllt
public void changeImport()
{

     OracleCommandBuilder oracleCmdBuilder = new OracleCommandBuilder(this._oracleDataAdapter);
     DataRow dr = this._import.Rows[0];
     dr.ItemArray = myItemArray;
     this._oracleDataAdapter.Update(this._import);
}

so habe ich es zuerst ausprobiert. ging nicht. deshalb dachte ich, dass ich vllt ein updatecommand selber angeben muss. geht aber auch nicht. ich weiss leider nicht was genau der fehler besagt. sonst wüsste ich vllt auch wo ich was ändern müsste.

02.03.2006 - 13:20 Uhr

hat niemand eine idee woran es liegen kann?
wenn nötig poste ich auch gerne etwas code.
mfg
Afr0

01.03.2006 - 17:05 Uhr

ach so geht das... muss ja nur mal gesagt werden

01.03.2006 - 16:30 Uhr

was ist denn getdate für ein datentyp? wenns DateTime ist dann speicher halt erst in eine DateTime-variable und dann nur noch die ticks abfragen. anders kannst du das glaub ich nicht nach int konvertieren

01.03.2006 - 16:27 Uhr

versuchs mal mit

 string meinString =  .......Rows[0].ItemArray[index].ToString();
01.03.2006 - 16:14 Uhr

hi leute,
ich versuche gerade eine zeile in einer tabelle meiner oracle-datenbank zu aktualisieren.

das ganze mache ich wie folgt: -connection herstellen -connection.open -oraclecommand erstellen ("select * from tabelle", connection); -dataadapter erstellen -dataset erstellen -dataadapter.fill -komplette zeile der tabelle als datatable.rows[0].itemarray übergeben -daten ändern und in neuem itemarray speichern -dataadapter.updatecommand = new oraclecommand("update tabelle set row("+variable+","+variable2.......") where name = blub",connection); -commandbuilder erstellen -neues itemarray als row[0].itemarray in dem datatable anlegen

bis hier läuft alles wunderbar.

wenn ich nun oraclecommandbuilder.getupdatecommand();
aufrufe, dann erhalte ich folgende exception

'Eine nicht behandelte Ausnahme des Typs 'System.InvalidOperationException' ist in system.data.oracleclient.dll aufgetreten.
Zusätzliche Informationen: Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.'

hab schon überlegt einfach einen primärschlüssel im datatable zu definieren aber das hat nicht geholfen.

was mache ich hier falsch und wie kann ich die zeile überschreiben?

mfg
Afr0

22.02.2006 - 16:33 Uhr

ich denke nicht, dass der wert bei max null ist. denn mit

matID = Convert.ToInt32(ocmd.ExecuteScalar().ToString());

funktionierts 🙂

mfg
Afr0

22.02.2006 - 16:17 Uhr

hab das jetzt mal ausprobiert, bekomme aber eine invalidCastException.
weder ExecuteScalar noch ExecuteOracleScalar funktioniert.

🙁

22.02.2006 - 16:01 Uhr

hallo evilTK

danke für den hinweis 🙂

22.02.2006 - 15:56 Uhr

hi leute,
ich teste gerade mit einer oracle-datenbank herum und wollte über c# daten in einer tabelle anlegen. soweit so gut 😉

da die tabelle einen primärschlüssel hat (laufende nummer) dachte ich mir, den max-wert der id-spalte auszulesen und meinen indexer um 1 größer als den max-wert zu setzen.

jetzt frage ich mich, wie ich am einfachsten die ausgabe von:

OracleCommand ocmd = new OracleCommand("select MAX (ID) from TEST",conn);

zwischenspeichern kann. am besten wäre es wenn ich die ausgabe von MAX (ID) direkt als int-wert speichern könnte ohne vorher dataadapter datarow....... zu benutzen.

ich hoffe meine frage ist verständlich ^^

mfg
Afr0

20.02.2006 - 13:51 Uhr

hi leute,
ich habe ein 6-stelliges byte-array, welches ich mit ascii-werten für 0-9 und für A-Z fülle bei klick auf einen button wie folgt erhöhen möchte:

000000
000001
...
000009
00000A
00000B
...
00000Z
000010
...
000100
...
ZZZZZZ

soweit so gut.

hier mal mein code:


public bool pruefeBytes(int wert)
		{
			while(this.textBox1.Text != "ZZZZZZ")
			{
				if((wert >= 0)&&(wert < this.asciiWerte.Length))
				{
					if(this.asciiWerte[wert] ==90)
					{
						this.asciiWerte[wert] = 48;

						if(pruefeBytes(wert-1))
						{
							wert--;
							pruefeBytes(wert);                    				
						}	
						this.asciiWerte[wert] = 48;

						//this.textBox1.Text = this.ascii.GetString(this.asciiWerte);	
						Console.WriteLine(this.ascii.GetString(this.asciiWerte));
						//return true;
						stat = true;
					}
					else
					{
						byte b = this.asciiWerte[wert];
						b++;
						this.asciiWerte[wert]=b;
						pruefeFehler(wert);
						//this.textBox1.Text = this.ascii.GetString(this.asciiWerte);						
						Console.WriteLine(this.ascii.GetString(this.asciiWerte));
						//return false;
						stat = false;
					}				
				}
			}
			
			return stat;
		}
		public void pruefeFehler(int wert)
		{
			if((this.asciiWerte[wert] > 57)&&(this.asciiWerte[wert] <65))
			{
				byte b = this.asciiWerte[wert];
				b++;
				this.asciiWerte[wert] = b;
				pruefeFehler(wert);
			}    
			else
			{
				return;
			}
		}

wenn ich in pruefeBytes(int wert) die while-schleife wegnehme erhöht sich der wert bei jedem button-klick genau so wie ichs haben will.
lasse ich das aber in meiner while-schleife laufen, so erhalte ich folgende ausgabe (sowohl in ner textbox als auch auf console)

000000
000001
....
00000Z
000010
000020
....
Z00000 << Hier ist dann einfach ende. das ist aber nur der fall, wenn ich das in ner schleifa laufen lasse. ich verstehe nicht warum....
kann mir das jemand erklären?

mfg
Afr0

*EDIT*
ok ich musste die while schleife dort setzen wo ich die methode aufrufe.

mfg
Afr0