Die Constraints macht Probleme bei der Fill-Methode
-
Guten liebe Programmierer-Welt
Wollte es mal programmier-technisch versuchen ein DataSet mittels OleDbAdapter zu befüllen, doch die DS-Constraints macht mir immer einen Strich durch die Rechnung.
Kann mir Jemand unter die Arme greiffen beim Lösen dieses Problems?
Ich poste mal meinen Code
#using <mscorlib.dll> #using <System.dll> namespace DatenbankKomplett { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Data::OleDb; using namespace System::Data::SqlTypes; using namespace System::Drawing; /// <summary> /// Zusammenfassung für MyForm /// </summary> public ref class MyForm : public System::Windows::Forms::Form { public: MyForm(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // } protected: /// <summary> /// Verwendete Ressourcen bereinigen. /// </summary> ~MyForm() { if (components) { delete components; } } private: System::Windows::Forms::Button^ btnLoad; private: System::Windows::Forms::Button^ btnSchliessen; private: System::Windows::Forms::ListView^ lvw; private: System::Windows::Forms::Label^ lbl; protected: protected: private: /// <summary> /// Erforderliche Designervariable. /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> void InitializeComponent(void) { this->btnLoad = (gcnew System::Windows::Forms::Button()); this->btnSchliessen = (gcnew System::Windows::Forms::Button()); this->lvw = (gcnew System::Windows::Forms::ListView()); this->lbl = (gcnew System::Windows::Forms::Label()); this->SuspendLayout(); // // btnLoad // this->btnLoad->Location = System::Drawing::Point(42, 37); this->btnLoad->Name = L"btnLoad"; this->btnLoad->Size = System::Drawing::Size(116, 37); this->btnLoad->TabIndex = 0; this->btnLoad->Text = L"Load"; this->btnLoad->UseVisualStyleBackColor = true; this->btnLoad->Click += gcnew System::EventHandler(this, &MyForm::btnLoad_Click); // // btnSchliessen // this->btnSchliessen->Location = System::Drawing::Point(1022, 576); this->btnSchliessen->Name = L"btnSchliessen"; this->btnSchliessen->Size = System::Drawing::Size(116, 37); this->btnSchliessen->TabIndex = 1; this->btnSchliessen->Text = L"Schliessen"; this->btnSchliessen->UseVisualStyleBackColor = true; this->btnSchliessen->Click += gcnew System::EventHandler(this, &MyForm::btnSchliessen_Click); // // lvw // this->lvw->FullRowSelect = true; this->lvw->GridLines = true; this->lvw->Location = System::Drawing::Point(42, 147); this->lvw->MultiSelect = false; this->lvw->Name = L"lvw"; this->lvw->Size = System::Drawing::Size(640, 353); this->lvw->TabIndex = 2; this->lvw->UseCompatibleStateImageBehavior = false; this->lvw->View = System::Windows::Forms::View::Details; // // lbl // this->lbl->AutoSize = true; this->lbl->Location = System::Drawing::Point(39, 526); this->lbl->Name = L"lbl"; this->lbl->Size = System::Drawing::Size(46, 17); this->lbl->TabIndex = 3; this->lbl->Text = L"label1"; // // MyForm // this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(1171, 638); this->Controls->Add(this->lbl); this->Controls->Add(this->lvw); this->Controls->Add(this->btnSchliessen); this->Controls->Add(this->btnLoad); this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog; this->MaximizeBox = false; this->MinimizeBox = false; this->Name = L"MyForm"; this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; this->Text = L"MyForm"; this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion private: System::Void btnLoad_Click(System::Object^ sender, System::EventArgs^ e) { this->btnLoad->Enabled = false; OleDbConnection^ conn = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\\DB\\DB.accdb"); OleDbDataAdapter^ adapter = gcnew OleDbDataAdapter(); DataTable^ dt = gcnew DataTable("table"); try { DataColumn^ colPrimaryKey = gcnew DataColumn("colID"); colPrimaryKey->DataType = System::Type::GetType("System.Int32"); colPrimaryKey->AllowDBNull = false; colPrimaryKey->AutoIncrement = true; colPrimaryKey->AutoIncrementSeed = 0; colPrimaryKey->AutoIncrementStep = 1; colPrimaryKey->Caption = "ID"; colPrimaryKey->MaxLength = -1; colPrimaryKey->Unique = true; colPrimaryKey->ReadOnly = true; dt->Columns->Add(colPrimaryKey); DataColumn^ colDaemung = gcnew DataColumn("colErnte"); colDaemung->DataType = System::Type::GetType("System.String"); colDaemung->AllowDBNull = false; colDaemung->AutoIncrement = false; colDaemung->Caption = "Ernte"; colDaemung->MaxLength = 100; colDaemung->Unique = false; colDaemung->ReadOnly = true; dt->Columns->Add(colDaemung); DataColumn^ colLage = gcnew DataColumn("colGewicht"); colLage->DataType = System::Type::GetType("System.Double"); colLage->AllowDBNull = false; colLage->AutoIncrement = false; colLage->Caption = "Gewicht"; colLage->MaxLength = 100; colLage->Unique = false; colLage->ReadOnly = true; dt->Columns->Add(colLage); DataColumn^ colMoney = gcnew DataColumn("colMoney"); colMoney->DataType = System::Type::GetType("System.Decimal"); colMoney->AllowDBNull = false; colMoney->AutoIncrement = false; colMoney->Caption = "Preis m2"; colMoney->MaxLength = -1; colMoney->Unique = false; colMoney->ReadOnly = true; dt->Columns->Add(colMoney); array<DataColumn^>^ colsdata = { colPrimaryKey }; for (int i = 0; i < colsdata->Length -1; i++) { dt->PrimaryKey[i] = dt->Columns["colID"]; } DataSet^ ds = gcnew DataSet(); ds->DataSetName = "dataset"; ds->Tables->Add(dt); adapter->MissingSchemaAction = MissingSchemaAction::AddWithKey; conn->Open(); adapter->SelectCommand = gcnew OleDbCommand("SELECT ID, Ernte, Gewicht, Preis\r\nFROM Erdbeeren", conn); adapter->Fill(ds,"table"); // Löst Fehler aus; catch (OleDbException^ oleDbEx) { MessageBox::Show(oleDbEx->Message->ToString()+ "\n\n"+ oleDbEx->StackTrace->ToString()); } catch (DuplicateNameException^ dupEx) { MessageBox::Show(dupEx->Message->ToString() + "\n\n" + dupEx->StackTrace->ToString()); } catch (ConstraintException^ constrEx) { MessageBox::Show(constrEx->Message->ToString() + "\n\n" + constrEx->StackTrace->ToString() +"\n\n" + constrEx->Source->ToString()); } catch (NullReferenceException^ nullrefEx) { MessageBox::Show(nullrefEx->Message->ToString() + "\n\n" + nullrefEx->StackTrace->ToString()); } catch (ArgumentException^ ArgEx) { MessageBox::Show(ArgEx->Message->ToString() + "\n\n" + ArgEx->StackTrace->ToString()); } catch (Exception^ er) { MessageBox::Show(er->Message->ToString() + "\n\n" + er->StackTrace->ToString()); } finally { if (conn->State == ConnectionState::Open) { conn->Close(); delete (IDisposable^)conn; delete (IDisposable^)adapter; } } }
Folgend die Fehlermeldung:
Einschränkungen konnten nicht aktiviert werden. Mindestens eine Zeile enthält Werte die die Einschränkungen non-null, unique or foreign-key verletzen.
bei System.Data.DataSet.EnableConstraints()
bei System.Data.DataSet.set_EnforceConstraints(Boolean value)
bei System.Data.DataTable.EndLoadData()
bei System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
bei System.Data.Common.DataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
bei System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
bei System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
bei System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
bei DatenbankKomplett.MyForm.btnLoad_Click(Object sender, EventArgs e) in f:\projekte\datenbankkomplett\datenbankkomplett\myform.h:Zeile 209.System.Data
Vielen Dank im Voraus für Euer Engagement ..
Lieben Gruss