Visual C++ .NET/Database ADO.net/SqlDataAdapter
Maintain the table of Authors
<source lang="csharp">
using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Data::SqlClient; using namespace System::Drawing; using namespace System::Configuration; public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); SqlConnection ^connect = gcnew SqlConnection(); connect->ConnectionString = ConfigurationManager::ConnectionStrings["SQLConnection"]->ConnectionString; dAdapt = gcnew SqlDataAdapter(); dAdapt->MissingSchemaAction = MissingSchemaAction::AddWithKey; dAdapt->SelectCommand = gcnew SqlCommand("SELECT AuthorID, LastName, FirstName FROM Authors", connect); dAdapt->InsertCommand = gcnew SqlCommand("INSERT INTO Authors (LastName, FirstName)VALUES (@LastName, @FirstName)", connect); dAdapt->InsertCommand->Parameters->Add("@LastName", SqlDbType::VarChar, 50, "LastName"); dAdapt->InsertCommand->Parameters->Add("@FirstName", SqlDbType::VarChar, 50, "FirstName"); dAdapt->UpdateCommand = gcnew SqlCommand("UPDATE Authors SET LastName = @LastName, FirstName = @FirstName " "WHERE AuthorID = @AuthorID", connect); dAdapt->UpdateCommand->Parameters->Add("@LastName", SqlDbType::VarChar, 50, "LastName"); dAdapt->UpdateCommand->Parameters->Add("@FirstName", SqlDbType::VarChar, 50, "FirstName"); dAdapt->UpdateCommand->Parameters->Add("@AuthorID", SqlDbType::Int, 4, "AuthorID"); dAdapt->DeleteCommand = gcnew SqlCommand("DELETE FROM Authors WHERE AuthorID = @AuthorID", connect); dAdapt->DeleteCommand->Parameters->Add("@AuthorID", SqlDbType::Int, 4, "AuthorID"); dSet = gcnew DataSet(); dAdapt->Fill(dSet, "Authors"); DataTable ^dt = dSet->Tables["Authors"]; if (dt == nullptr) throw gcnew Exception("No Authors Table"); for each(DataRow ^row in dt->Rows) { lbAuthors->Items->Add(ListBoxItem(row)); } CurrentAuthorID = -1; } System::Windows::Forms::Button^ bnRollback; System::Windows::Forms::Button^ bnCommit; System::Windows::Forms::Button^ bnDelete; System::Windows::Forms::Button^ bnUpdate; System::Windows::Forms::Button^ bnAdd; System::Windows::Forms::ListBox^ lbAuthors; System::Windows::Forms::TextBox^ tbLastName; System::Windows::Forms::TextBox^ tbFirstName; System::Windows::Forms::Label^ label2; System::Windows::Forms::Label^ label1; System::ComponentModel::Container ^components; SqlDataAdapter ^dAdapt; DataSet ^dSet; int CurrentAuthorID; void InitializeComponent(void) { this->bnRollback = (gcnew System::Windows::Forms::Button()); this->bnCommit = (gcnew System::Windows::Forms::Button()); this->bnDelete = (gcnew System::Windows::Forms::Button()); this->bnUpdate = (gcnew System::Windows::Forms::Button()); this->bnAdd = (gcnew System::Windows::Forms::Button()); this->lbAuthors = (gcnew System::Windows::Forms::ListBox()); this->tbLastName = (gcnew System::Windows::Forms::TextBox()); this->tbFirstName = (gcnew System::Windows::Forms::TextBox()); this->label2 = (gcnew System::Windows::Forms::Label()); this->label1 = (gcnew System::Windows::Forms::Label()); this->SuspendLayout(); // // bnRollback // this->bnRollback->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0))); this->bnRollback->Location = System::Drawing::Point(312, 162); this->bnRollback->Name = L"bnRollback"; this->bnRollback->Size = System::Drawing::Size(75, 23); this->bnRollback->TabIndex = 19; this->bnRollback->Text = L"Rollback"; this->bnRollback->Click += gcnew System::EventHandler(this, &Form1::bnRollback_Click); // // bnCommit // this->bnCommit->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 8.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(0))); this->bnCommit->Location = System::Drawing::Point(312, 132); this->bnCommit->Margin = System::Windows::Forms::Padding(3, 0, 3, 3); this->bnCommit->Name = L"bnCommit"; this->bnCommit->Size = System::Drawing::Size(75, 23); this->bnCommit->TabIndex = 18; this->bnCommit->Text = L"Commit"; this->bnCommit->Click += gcnew System::EventHandler(this, &Form1::bnCommit_Click); // // bnDelete // this->bnDelete->Location = System::Drawing::Point(312, 78); this->bnDelete->Name = L"bnDelete"; this->bnDelete->Size = System::Drawing::Size(75, 23); this->bnDelete->TabIndex = 17; this->bnDelete->Text = L"Delete"; this->bnDelete->Click += gcnew System::EventHandler(this, &Form1::bnDelete_Click); // // bnUpdate // this->bnUpdate->Location = System::Drawing::Point(312, 46); this->bnUpdate->Name = L"bnUpdate"; this->bnUpdate->Size = System::Drawing::Size(75, 23); this->bnUpdate->TabIndex = 16; this->bnUpdate->Text = L"Update"; this->bnUpdate->Click += gcnew System::EventHandler(this, &Form1::bnUpdate_Click); // // bnAdd // this->bnAdd->Location = System::Drawing::Point(312, 18); this->bnAdd->Margin = System::Windows::Forms::Padding(3, 3, 3, 1); this->bnAdd->Name = L"bnAdd"; this->bnAdd->Size = System::Drawing::Size(75, 23); this->bnAdd->TabIndex = 15; this->bnAdd->Text = L"Add"; this->bnAdd->Click += gcnew System::EventHandler(this, &Form1::bnAdd_Click); // // lbAuthors // this->lbAuthors->FormattingEnabled = true; this->lbAuthors->Location = System::Drawing::Point(25, 95); this->lbAuthors->Name = L"lbAuthors"; this->lbAuthors->Size = System::Drawing::Size(257, 95); this->lbAuthors->TabIndex = 14; this->lbAuthors->SelectedIndexChanged += gcnew System::EventHandler(this, &Form1::lbAuthors_SelectedIndexChanged); // // tbLastName // this->tbLastName->Location = System::Drawing::Point(87, 51); this->tbLastName->Margin = System::Windows::Forms::Padding(1, 3, 3, 3); this->tbLastName->Name = L"tbLastName"; this->tbLastName->Size = System::Drawing::Size(127, 20); this->tbLastName->TabIndex = 13; // // tbFirstName // this->tbFirstName->Location = System::Drawing::Point(87, 24); this->tbFirstName->Margin = System::Windows::Forms::Padding(1, 3, 3, 3); this->tbFirstName->Name = L"tbFirstName"; this->tbFirstName->Size = System::Drawing::Size(127, 20); this->tbFirstName->TabIndex = 12; // // label2 // this->label2->AutoSize = true; this->label2->Location = System::Drawing::Point(25, 57); this->label2->Margin = System::Windows::Forms::Padding(3, 3, 2, 3); this->label2->Name = L"label2"; this->label2->Size = System::Drawing::Size(58, 13); this->label2->TabIndex = 11; this->label2->Text = L"Last Name"; // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(25, 27); this->label1->Margin = System::Windows::Forms::Padding(3, 3, 2, 3); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(57, 13); this->label1->TabIndex = 10; this->label1->Text = L"First Name"; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(413, 208); this->Controls->Add(this->bnRollback); this->Controls->Add(this->bnCommit); this->Controls->Add(this->bnDelete); this->Controls->Add(this->bnUpdate); this->Controls->Add(this->bnAdd); this->Controls->Add(this->lbAuthors); this->Controls->Add(this->tbLastName); this->Controls->Add(this->tbFirstName); this->Controls->Add(this->label2); this->Controls->Add(this->label1); this->ResumeLayout(false); this->PerformLayout(); } String ^ListBoxItem(DataRow ^row) { return String::Format("{0} {1} {2}", row["AuthorID"], row["FirstName"], row["LastName"]); } System::Void bnAdd_Click(System::Object^ sender, System::EventArgs^ e) { if (tbFirstName->Text->Trim()->Length == 0 || tbLastName->Text->Trim()->Length == 0) return; DataTable ^dt = dSet->Tables["Authors"]; DataRow ^row = dt->NewRow(); row["FirstName"] = tbFirstName->Text; row["LastName"] = tbLastName->Text; dt->Rows->Add(row); lbAuthors->Items->Add(ListBoxItem(row)); tbFirstName->Text = ""; tbLastName->Text = ""; } System::Void bnUpdate_Click(System::Object^ sender, System::EventArgs^ e) { if (CurrentAuthorID < 0) return; DataTable ^dt = dSet->Tables["Authors"]; array<DataRow^>^ row = dt->Select(String::Format("AuthorID={0}", CurrentAuthorID)); row[0]["FirstName"] = tbFirstName->Text; row[0]["LastName"] = tbLastName->Text; lbAuthors->Items->Insert(lbAuthors->SelectedIndex, ListBoxItem(row[0])); lbAuthors->Items->RemoveAt(lbAuthors->SelectedIndex); } System::Void bnDelete_Click(System::Object^ sender, System::EventArgs^ e) { if (CurrentAuthorID < 0) return; DataTable ^dt = dSet->Tables["Authors"]; array<DataRow^>^ row = dt->Select(String::Format("AuthorID={0}", CurrentAuthorID)); row[0]->Delete(); lbAuthors->Items->RemoveAt(lbAuthors->SelectedIndex); } System::Void bnCommit_Click(System::Object^ sender, System::EventArgs^ e) { dAdapt->Update(dSet, "Authors"); dSet->AcceptChanges(); lbAuthors->Items->Clear(); DataTable ^dt = dSet->Tables["Authors"]; for each(DataRow ^row in dt->Rows) { lbAuthors->Items->Add(ListBoxItem(row)); } CurrentAuthorID = -1; } System::Void bnRollback_Click(System::Object^ sender, System::EventArgs^ e) { dSet->RejectChanges(); lbAuthors->Items->Clear(); DataTable ^dt = dSet->Tables["Authors"]; for each(DataRow ^row in dt->Rows) { lbAuthors->Items->Add(ListBoxItem(row)); } CurrentAuthorID = -1; } System::Void lbAuthors_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { array<wchar_t>^ ASpace = gcnew array<wchar_t> {(wchar_t)" "}; if (lbAuthors->SelectedItem == nullptr) { CurrentAuthorID = -1; tbFirstName->Text = ""; tbLastName->Text = ""; return; } array<String^>^ split = lbAuthors->SelectedItem->ToString()->Split(ASpace); CurrentAuthorID = Convert::ToInt32(split[0]); tbFirstName->Text = split[1]; tbLastName->Text = split[2]; } };
}
[STAThreadAttribute] int main(array<System::String ^> ^args) {
Application::Run(gcnew Form1()); return 0;
}
</source>