Datentypen stimmen nicht überein

TVE

Erfahrenes Mitglied
Hi zusammen

Bei meinem aktuellen Projekt habe ich eine MySQL DB welche ich mit meinem C# Programm anspreche, etc.

Nun wollte ich mehrere DataGrids zusammen vernetzt haben, am besten würde dies über eine Datenrelation im DataSet Objekt funktionieren, so dachte ich mir zumindest.

Nachdem ich die Relation erstellt hatte warf das Programm aber die Exception, dass der Datentyp vom Primärschlüssel nicht mit dem vom Fremdschlüssel überein stimmte. Laut meinem MySQL Client sind es beides Int(11), laut meinem Programm ist der Primärschlüssel aber vom Typ Int64 und der Fremdschlüssel vom Typ Int32. Wie kann das sein? Liegt es vielleicht daran, dass der Primärschlüssel eine Auto_Increment Funktion hat und einen Primary Key Schlüssel aufweist?

Gibt es eine Möglichkeit den Datentyp eines Feldes im DataSet zu ändern oder muss ich allenfalls meine DB anpassen?
 

TVE

Erfahrenes Mitglied
Hallo zioProduct

Danke für deinen Denkanstoss. Leider hilft das so direkt nicht weiter, da ich nicht am Wert selbst interessiert bin, sondern an der Änderung des Datentyps. Ich kann eben leider einem Int64 Primärschlüssel keinen Int32 Fremdschlüssel zuweisen. Mit deinem Code würde ich laut MSDN ja nur den Wert zurückbekommen.

Zitat MSDN:
Converts the specified String representation of a number to an equivalent 64-bit signed integer.

Damit du den Überblick über die problematische Stelle kurz erhälst:
Code:
			//Tabelle Kunden
			OdbcCommand cmdListe = new OdbcCommand("SELECT * FROM kunde",DB);
			adapterListe.SelectCommand = cmdListe;
			adapterListe.Fill(DS, "kunde");
			
			//Tabelle Person
			OdbcCommand cmdPerson = new OdbcCommand("SELECT * FROM person",DB);
			adapterPerson.SelectCommand = cmdPerson;
			adapterPerson.Fill(DS, "person");
			
			//Try to read data into datagrids
			try
			{
				//After connection is established, set DataBinding
				dgrdListe.SetDataBinding(DS, "kunde");
				dgrdPerson.SetDataBinding(DS, "person");
				
				//Set relations between tables
				DS.Relations.Add("Kunde_Person",DS.Tables["kunde"].Columns["ku_id"],DS.Tables["person"].Columns["pe_kuidfs"]);
			}

Das Problem tritt dann eben beim hinzufügen der Relationen auf. Den Datentyp vom Fremdschlüssel selbst konnte ich aber auch per Convert.ToInt64 nicht abändern. (Compiler sagte etwas von ReadOnly)
 

TVE

Erfahrenes Mitglied
Habe gerade die Idee gehabt, dass ich vor der Fill-Methode die gesamte Struktur des DataSets definieren könnte, dann kann ich auch die Datentypen von Hand setzen und sie mir nicht generieren lassen. So müsste es dann funktionieren.
 

zioProduct

Erfahrenes Mitglied
Hmm, da kann ich dir wohl nicht wirklich gut helfen. Ich hab meine Relations immer per SQL, oder im Acces gesetzt, also per SQL meine ich, beim anlegen der Tabelle schon die Primary und Foreign keys definieren. Am beste ist es wenn du dir nochmal genau anschaust, was für Datentypen es sind, in der tabelle1 wo deine ID der PrimaryKey ist, sollte es ja Autowert sein, sprich macht sinn, oder auch nicht jedem das seine aber auf jedenfall muss dort der Wert als IDENTITY abgelegt sein. In der tabelle2 ist es eine ganz normale neue Variabel vom Typ Int.

Was noch eine möglichkeit wäre, das du zuerst, die zwei Werte seperat nimmst, also beide ausliest, und sie dann je einer Variabel zuweist. Diese Variabel konventierst du dann in den selben Int wert, und fügst bei der Relation die Variabel ein, statt dem genauen Pfad, was aber wahrscheinlich nicht gehen wird. Aber wie gesagt, kenn mich beim Relations setzten nicht wirklich aus:(

trotzdem Viel glück :(