• C++: read access data using ADOX.DLL and System::Data::OleDb


    #pragma once
    #include "Form2.h"
    
    namespace cdemo {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Data::OleDb;
    	using namespace System::IO;
    
    	/// <summary>
    	/// Form1 摘要
    	///http://1code.codeplex.com/
    	///http://www.codeproject.com/Tips/810596/Csharp-VB-NET-Cplusplus-CLI-Create-read-and-write
    	/// 警告: 如果更改此类的名称,则需要更改
    	///          与此类所依赖的所有 .resx 文件关联的托管资源编译器工具的
    	///          “资源文件名”属性。否则,
    	///          设计器将不能与此窗体的关联
    	///          本地化资源正确交互。
    	/// </summary>
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: 在此处添加构造函数代码
    			//
    		}
    
    	protected:
    		/// <summary>
    		/// 清理所有正在使用的资源。
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    	private: System::Windows::Forms::Label^  label1;
    	private: System::Windows::Forms::DataGridView^  dataGridView1;
    	private: System::Windows::Forms::ComboBox^  comboBoxTables;
    	private: System::Windows::Forms::Button^  buttonOK;
    	protected: 
    
    	private:
    		/// <summary>
    		/// 必需的设计器变量。
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// 设计器支持所需的方法 - 不要
    		/// 使用代码编辑器修改此方法的内容。
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->dataGridView1 = (gcnew System::Windows::Forms::DataGridView());
    			this->comboBoxTables = (gcnew System::Windows::Forms::ComboBox());
    			this->buttonOK = (gcnew System::Windows::Forms::Button());
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->dataGridView1))->BeginInit();
    			this->SuspendLayout();
    			// 
    			// label1
    			// 
    			this->label1->AutoSize = true;
    			this->label1->Location = System::Drawing::Point(533, 268);
    			this->label1->Name = L"label1";
    			this->label1->Size = System::Drawing::Size(41, 12);
    			this->label1->TabIndex = 0;
    			this->label1->Text = L"label1";
    			// 
    			// dataGridView1
    			// 
    			this->dataGridView1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;
    			this->dataGridView1->Location = System::Drawing::Point(32, 84);
    			this->dataGridView1->Name = L"dataGridView1";
    			this->dataGridView1->RowTemplate->Height = 23;
    			this->dataGridView1->Size = System::Drawing::Size(478, 344);
    			this->dataGridView1->TabIndex = 1;
    			this->dataGridView1->CellDoubleClick += gcnew System::Windows::Forms::DataGridViewCellEventHandler(this, &Form1::dataGridView1_CellDoubleClick);
    			// 
    			// comboBoxTables
    			// 
    			this->comboBoxTables->FormattingEnabled = true;
    			this->comboBoxTables->Location = System::Drawing::Point(87, 27);
    			this->comboBoxTables->Name = L"comboBoxTables";
    			this->comboBoxTables->Size = System::Drawing::Size(121, 20);
    			this->comboBoxTables->TabIndex = 2;
    			// 
    			// buttonOK
    			// 
    			this->buttonOK->Location = System::Drawing::Point(228, 27);
    			this->buttonOK->Name = L"buttonOK";
    			this->buttonOK->Size = System::Drawing::Size(75, 23);
    			this->buttonOK->TabIndex = 3;
    			this->buttonOK->Text = L"button1";
    			this->buttonOK->UseVisualStyleBackColor = true;
    			this->buttonOK->Click += gcnew System::EventHandler(this, &Form1::buttonOK_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(586, 485);
    			this->Controls->Add(this->buttonOK);
    			this->Controls->Add(this->comboBoxTables);
    			this->Controls->Add(this->dataGridView1);
    			this->Controls->Add(this->label1);
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
    			this->FormClosed += gcnew System::Windows::Forms::FormClosedEventHandler(this, &Form1::Form1_FormClosed);
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->dataGridView1))->EndInit();
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    
    
    
    		String ^DBPath;
    
            OleDbConnection ^conn;
            OleDbDataAdapter ^adapter;
            DataTable ^dtMain;
    
    	private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
    
    
                    DBPath = Application::StartupPath + "\test.mdb";
    				 // create DB via ADOX if not exists
    				 if (!File::Exists(DBPath)) {
    					 ADOX::Catalog ^cat = gcnew ADOX::Catalog(); //添加引用 Interop.ADOX.2.8.dll
                         cat->Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath);
                         cat = nullptr;
    				 }
    
    				 // connect to DB
                	 conn = gcnew OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath);
                	 conn->Open();
         //         try {
    					//OleDbCommand ^cmd = gcnew OleDbCommand("CREATE TABLE [geovindu] ([id] COUNTER PRIMARY KEY, [FirstName] MEMO, [Age] INT,[Email] MEMO);", conn); //创建表
         //       		cmd->ExecuteNonQuery();
    					//delete cmd;
    				 //} catch (Exception ^ex) {if (ex != nullptr) ex = nullptr; }
    
    				 // get all tables from DB
    				 DataTable ^dt = conn->GetSchema("Tables");
    				 for (int i = 0; i < dt->Rows->Count; i++) {
                        if (dt->Rows[i]->ItemArray[dt->Columns->IndexOf("TABLE_TYPE")]->ToString() == "TABLE") {
                            comboBoxTables->Items->Add(dt->Rows[i]->ItemArray[dt->Columns->IndexOf("TABLE_NAME")]->ToString());
                        }
    
    
                     }
    				 delete dt;
    
    
    
    				 int i,pr=0;
    				 for(i=1;i<=10;i++)				 
    					 pr=pr*i;
                        
    				 //char s="pr=%d";
    
    				 this->label1->Text= pr.ToString();
    
    				    
    				 
    				 //设置dataGridView的一些属性
        //        dataGridView1->Dock=DockStyle::Fill; 
        //        dataGridView1->AutoResizeColumns();
        //        dataGridView1->AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode::AllCells;
        //        dataGridView1->EnableHeadersVisualStyles=true;/*根据应用程序来设置的,如果为false则根据自己的设置来绘制*/
    
        //        //设置表头的属性
        //        DataGridViewCellStyle^ headerStyle=gcnew DataGridViewCellStyle;
        //        headerStyle->Font=gcnew System::Drawing::Font("Times New Roman",12,FontStyle::Bold);
        //        headerStyle->BackColor=Color::AliceBlue;
        //        headerStyle->ForeColor=Color::BurlyWood;
        //        dataGridView1->ColumnHeadersDefaultCellStyle=headerStyle;
    
        //        dataGridView1->AutoResizeColumnHeadersHeight();
    
    				//DataSet^ myDataSet = gcnew DataSet("Game Data");
    				//myDataSet->Tables->Add("Player");
    				//myDataSet->Tables->Add("Score");
     
    				//DataTable^ playerTable = myDataSet->Tables["Player"];
    				//DataColumn^ firstNameColumn1 = playerTable->Columns->Add("First Name",String::typeid);
    				//DataColumn^ lastNameColumn1 = playerTable->Columns->Add("Last Name",String::typeid);
    				//playerTable->Columns->Add("Email", String::typeid);
    				//playerTable->Rows->Add("geovin","du","geovindu@163.com");
    				//playerTable->Rows->Add("聚文","涂","geovindu@qq.com");
        //             //1.
    				////dataGridView1->DataSource=myDataSet->Tables["Player"];//playerTable;
    				////2.
        //            dataGridView1->DataSource=playerTable;
    				//dataGridView1->Refresh();
    				////dataGridView1->DataBindings::get;
    
    			 }
                 
    			 ////
    	        private: System::Void dataGridView1_CellDoubleClick(System::Object^  sender, System::Windows::Forms::DataGridViewCellEventArgs^  e) {
    
                 Form2 ^ frm2 = gcnew Form2();
    			 frm2->Text="编辑资料";
    			 frm2->textBox1->Text=dataGridView1->Rows[e->RowIndex]->Cells["FirstName"]->Value->ToString();
    			 frm2->textBox2->Text=dataGridView1->Rows[e->RowIndex]->Cells["Email"]->Value->ToString();
                 frm2->Show();
                 //this->Hide();
                    
                     
                    
    			 }
    			
    					 ///
    	         private: System::Void buttonOK_Click(System::Object^  sender, System::EventArgs^  e) {
    
                    if (comboBoxTables->SelectedItem == nullptr) return;
    
                    adapter = gcnew OleDbDataAdapter("SELECT * FROM [" + comboBoxTables->SelectedItem->ToString() + "]", conn);
    
                 gcnew OleDbCommandBuilder(adapter);
    
                 dtMain = gcnew DataTable();
                 adapter->Fill(dtMain);
                 dtMain->Columns["id"]->ReadOnly = true; // deprecate id field edit to prevent exceptions
                 dataGridView1->DataSource = dtMain;
    
    			 }
    					  ///
    			private: System::Void Form1_FormClosed(System::Object^  sender, System::Windows::Forms::FormClosedEventArgs^  e) {
    
               if (adapter == nullptr) return;
    
                 adapter->Update(dtMain);
    
    		 }
    };
    }
    

      

  • 相关阅读:
    [LeetCode] Max Increase to Keep City Skyline 保持城市天际线的最大增高
    [LeetCode] Bricks Falling When Hit 碰撞时砖头掉落
    [LeetCode] Number of Lines To Write String 写字符串需要的行数
    [LeetCode] Unique Morse Code Words 独特的摩斯码单词
    [LeetCode] Find Eventual Safe States 找到最终的安全状态
    [LeetCode] Minimum Swaps To Make Sequences Increasing 使得序列递增的最小交换
    [LeetCode] Similar RGB Color 相似的红绿蓝颜色
    [LeetCode] Champagne Tower 香槟塔
    [LeetCode] Smallest Rotation with Highest Score 得到最高分的最小旋转
    [LeetCode] All Paths From Source to Target 从起点到目标点到所有路径
  • 原文地址:https://www.cnblogs.com/geovindu/p/5742365.html
Copyright © 2020-2023  润新知