Autor |
Beitrag |
niggo233
      
Beiträge: 46
Erhaltene Danke: 1
Win7
C#,NXT,PHP,Html,CSS,JavaScript
|
Verfasst: So 18.09.11 09:00
Hallo
ich habe ein problem ich habe zwei Tabellen in einer Daten bank die per BindingSource mit einandere verbunden sind,es ist zwar nur eine Testdatenbank aber ich brauch das speichern natürlich für weitere Datenbankanwendungen.Die erste Tabelle heißt "Publishers" und dort kommt der Verlag für ein Buch hinein.Die zweite Tabelle heißt "Books" wo BooksId,PublisherId,Title und Author vorhanden ist.Wenn ich jetzt ein Verlag eingebe und dazu ein Buch vorhanden ist dann werden nur die Bücher von diesen Verlag angezeigt dieser Verlag war aber schon außerhalb der c# programmierung eingespeichert die zweite Tabelle also Books speichert er,aber wenn ich jetzt ein neuen Verlang speichern will stürtzt das Programm ab und zeigt mir eine ewig lange Fehlermeldung über den dataGridView
Hier mal mein kompletter Code für dieses Programm:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| ]namespace test_datenbank { public partial class Form1 : Form { SqlDataAdapter adapterPublisher; SqlDataAdapter adapterBooks; DataSet dsLibrary; public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Users\nig go\Documents\Visual Studio 2010\Projects\Library.mdf';Integrated Security=True;Connect Timeout=30;User Instance=True"); SqlCommand command = new SqlCommand("SELECT * FROM Publishers", conn); adapterPublisher = new SqlDataAdapter(command); SqlCommandBuilder cbPublisher = new SqlCommandBuilder(adapterPublisher);
adapterBooks = new SqlDataAdapter("SELECT * FROM Books", conn); SqlCommandBuilder cbBooks = new SqlCommandBuilder(adapterBooks);
dsLibrary = new DataSet();
dsLibrary.Tables.Add("Publishers"); adapterPublisher.Fill(dsLibrary, "Publishers"); dsLibrary.Tables.Add("Books"); adapterBooks.Fill(dsLibrary, "Books");
dsLibrary.Relations.Add("Publishers_Books", dsLibrary.Tables["Publishers"].Columns["PublisherId"], dsLibrary.Tables["Books"].Columns["PublisherId"]);
BindingSource bsPublishers = new BindingSource(); bsPublishers.DataSource = dsLibrary; bsPublishers.DataMember = "Publishers"; dataGridView1.DataSource = bsPublishers;
dataGridView1.DataSource = bsPublishers; dataGridView1.Columns[0].Visible = false; BindingSource bsBooks = new BindingSource(); bsBooks.DataSource = bsPublishers; bsBooks.DataMember = "Publishers_Books";
dataGridView2.DataSource = bsBooks; }
private void btnAbbrechen_Click(object sender, EventArgs e) { Application.Exit(); }
private void btnSpeichern_Click(object sender, EventArgs e) { adapterPublisher.Update(dsLibrary, "Publishers"); adapterBooks.Update(dsLibrary,"Books"); } } } |
Ich hoffe jemand kann mir helfen
danke schon mal im voraus
Mfg
Moderiert von Kha: ".NET Version" geändert
|
|
ujr
      
Beiträge: 102
Erhaltene Danke: 12
|
Verfasst: So 18.09.11 14:34
niggo233 hat folgendes geschrieben : | und zeigt mir eine ewig lange Fehlermeldung über den dataGridView |
Und die lautet wie?
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 18.09.11 15:16
Hier geht es nicht wirklich um Silverlight, oder  ?
_________________ >λ=
|
|
niggo233 
      
Beiträge: 46
Erhaltene Danke: 1
Win7
C#,NXT,PHP,Html,CSS,JavaScript
|
Verfasst: So 18.09.11 19:18
Kha hat folgendes geschrieben : | Hier geht es nicht wirklich um Silverlight, oder ? |
Tut mir leid silverlight nicht nur 4.0
tut mir leid
|
|
niggo233 
      
Beiträge: 46
Erhaltene Danke: 1
Win7
C#,NXT,PHP,Html,CSS,JavaScript
|
Verfasst: So 18.09.11 19:19
Hier die fehlermeldung:
DataGridView-Ausnahme
System.Data.InvalidConstraintExeption:Für
ForeignKeyConstraint Publishers_Books müssen die
untergeordneten Schlüsselwerte(3) in der übergeordneten
Tabelle vorhanden sein.
bei
System.Data.ForeignKeyConstraint.CheckConstrait(DataRowchildRow,DataRowAction action)
bei
System.Data.DataTable.RaiseRowChanging(DataRowChangeEven
tArgs args,DataRow eRow,DateRowAction eAction,Boolean
fireEvent)
bei System.Data.DataTable.SetNewRecordWorker(DataRow
row,Int32 proposedRecord,DataRowAction action,Boolean
isInMerge,Boolean suppressEnsurePropertyChanged,Int32
position,Boolean fireEvent,Exeption&deferred Execption)
bei System.Data.DataRow.EndEdit()
bei System.Data.DataRowView.EndEdit()
bei System.Windows.Forms.CurrencyManager.End currentEdit()
bei
System.Windows.Forms.DataGridView.DataGridViewDataConnect
ion.OnRowValidating(DataGridViewCellCancelEventArgs e)
Behandel Sie das DataError-Ereignis,um dieses Standarddialogfeld zu ersetzen
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 19.09.11 09:51
Hallo niggo233,
es müssen erst die Bücher abgespeichert werden, damit du dann Referenzen (Ids) auf diese in der Publisher-Tabelle angeben kannst (wegen des ForeignKeyConstraints).
Also vertausche einfach die beiden Update-Methoden:
C#-Quelltext 1: 2:
| adapterBooks.Update(dsLibrary,"Books"); adapterPublisher.Update(dsLibrary, "Publishers"); |
|
|
niggo233 
      
Beiträge: 46
Erhaltene Danke: 1
Win7
C#,NXT,PHP,Html,CSS,JavaScript
|
Verfasst: Di 20.09.11 16:40
Hi
ja also daran liegt es nicht gleiche Fehlermeldung
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 20.09.11 17:22
Wenn du einen neuen Publisher (Verlag) anlegst, setzt du denn dann die 'PublisherId' korrekt und überträgst sie für die neuen Bücher?
Ein Tutorial gibt es unter www.codeproject.com/...Quick&fr=1#xx0xx
Schau dir mal den Abschnitt 'Hierarchical data binding with a DataSet' an (die Eigenschaften DataColumn.AutoIncrement... könnten für dich interessant sein).
Für diesen Beitrag haben gedankt: niggo233
|
|
niggo233 
      
Beiträge: 46
Erhaltene Danke: 1
Win7
C#,NXT,PHP,Html,CSS,JavaScript
|
Verfasst: Do 20.10.11 18:17
|
|
|