C++: read SQL server data using System::Data::SqlClient
stdafx.h:
// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently #pragma once #using <mscorlib.dll> #using <System.dll> #using <System.Data.dll> #using <System.Xml.dll> // TODO: reference additional headers your program requires here
Form1.h
#pragma once namespace SQLServer2008R2inCCLI { 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::Configuration; using namespace ADODB;//c:\Program Files\Common Files\System\ADO\msado15.dll using namespace System::Data::SqlClient; /// <summary> /// Summary for Form1 /// /// WARNING: If you change the name of this class, you will need to change the /// 'Resource File Name' property for the managed resource compiler tool /// associated with all .resx files this class depends on. Otherwise, /// the designers will not be able to interact properly with localized /// resources associated with this form. /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: Add the constructor code here // } protected: /// <summary> /// Clean up any resources being used. /// </summary> ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::DataGridView^ dataGridView1; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::ComboBox^ comboBoxTables; private: System::Windows::Forms::Button^ buttonOK; private: System::Windows::Forms::ToolTip^ toolTip1; private: System::ComponentModel::IContainer^ components; protected: private: /// <summary> /// Required designer variable. /// </summary> #pragma region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> void InitializeComponent(void) { this->components = (gcnew System::ComponentModel::Container()); this->dataGridView1 = (gcnew System::Windows::Forms::DataGridView()); this->label1 = (gcnew System::Windows::Forms::Label()); this->comboBoxTables = (gcnew System::Windows::Forms::ComboBox()); this->buttonOK = (gcnew System::Windows::Forms::Button()); this->toolTip1 = (gcnew System::Windows::Forms::ToolTip(this->components)); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->dataGridView1))->BeginInit(); this->SuspendLayout(); // // dataGridView1 // this->dataGridView1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom) | System::Windows::Forms::AnchorStyles::Left) | System::Windows::Forms::AnchorStyles::Right)); this->dataGridView1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize; this->dataGridView1->Location = System::Drawing::Point(12, 44); this->dataGridView1->Name = L"dataGridView1"; this->dataGridView1->ShowCellToolTips = false; this->dataGridView1->Size = System::Drawing::Size(493, 266); this->dataGridView1->TabIndex = 0; this->dataGridView1->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::dataGridView1_MouseDown); this->dataGridView1->DataError += gcnew System::Windows::Forms::DataGridViewDataErrorEventHandler(this, &Form1::dataGridView1_DataError); // // label1 // this->label1->Location = System::Drawing::Point(12, 9); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(65, 32); this->label1->TabIndex = 1; this->label1->Text = L"Select table to show:"; // // comboBoxTables // this->comboBoxTables->DropDownStyle = System::Windows::Forms::ComboBoxStyle::DropDownList; this->comboBoxTables->FormattingEnabled = true; this->comboBoxTables->Location = System::Drawing::Point(83, 12); this->comboBoxTables->Name = L"comboBoxTables"; this->comboBoxTables->Size = System::Drawing::Size(165, 21); this->comboBoxTables->TabIndex = 2; // // buttonOK // this->buttonOK->Location = System::Drawing::Point(254, 12); this->buttonOK->Name = L"buttonOK"; this->buttonOK->Size = System::Drawing::Size(56, 21); this->buttonOK->TabIndex = 3; this->buttonOK->Text = L"OK"; this->buttonOK->UseVisualStyleBackColor = true; this->buttonOK->Click += gcnew System::EventHandler(this, &Form1::buttonOK_Click); // // toolTip1 // this->toolTip1->AutoPopDelay = 5000; this->toolTip1->InitialDelay = 0; this->toolTip1->IsBalloon = true; this->toolTip1->ReshowDelay = 0; this->toolTip1->ToolTipIcon = System::Windows::Forms::ToolTipIcon::Warning; this->toolTip1->UseAnimation = false; this->toolTip1->UseFading = false; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(517, 322); this->Controls->Add(this->buttonOK); this->Controls->Add(this->comboBoxTables); this->Controls->Add(this->label1); this->Controls->Add(this->dataGridView1); 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); } #pragma endregion String ^ServerName, ^DBName; SqlConnection ^conn; SqlDataAdapter ^adapter; DataTable ^dtMain; private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { ServerName = "GEOVINDU-PC\\GEOVIN"; DBName = "DuVehicle"; // create database if not exists //try { // ADODB::Connection="";//c:\Program Files\Common Files\System\ADO\msado15.dll // connect to server // to database "master" to check if our database exists // to create it if it isn't exists //conn = gcnew SqlConnection("Server=" + ServerName + ";Database=DuVehicle;UID=sa;PWD=geovindu;"); //conn->Open(); //SqlCommand ^cmd = gcnew SqlCommand(String::Format("CREATE DATABASE [{0}] ON (" + // " NAME = {0}, " + // " FILENAME = '" + Application::StartupPath + "\\{0}.mdf'" + // ");", // DBName), conn); // cmd->ExecuteNonQuery(); //delete cmd; /* } catch (Exception ^ex) { }*/ // create table "Table 1" if not exists //SqlCommand ^cmd = gcnew SqlCommand(String::Format( // "IF NOT EXISTS (" + // " SELECT [name] " + // " FROM sys.tables " + // " WHERE [name] = '{0}'" + // ") " + // "CREATE TABLE [{0}] (" + // " id [INT] IDENTITY(1,1) PRIMARY KEY CLUSTERED, " + // " [text column] [TEXT] NULL, " + // " [int column] [INT] NULL " + // ")", // "Table 1"), conn); // cmd->ExecuteNonQuery(); //delete cmd; conn = gcnew SqlConnection("Server=" + ServerName + ";Database=DuVehicle;UID=sa;PWD=geovindu;"); conn->Open(); // 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() == "BASE TABLE") { comboBoxTables->Items->Add(dt->Rows[i]->ItemArray[dt->Columns->IndexOf("TABLE_NAME")]->ToString()); } } delete dt; } private: System::Void buttonOK_Click(System::Object^ sender, System::EventArgs^ e) { if (comboBoxTables->SelectedItem == nullptr) return; adapter = gcnew SqlDataAdapter("SELECT * FROM [" + comboBoxTables->SelectedItem->ToString() + "]", conn); gcnew SqlCommandBuilder(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); } // show tooltip (not intrusive MessageBox) when user trying to input letters into INT column cell private: System::Void dataGridView1_DataError(System::Object^ sender, System::Windows::Forms::DataGridViewDataErrorEventArgs^ e) { if (dtMain->Columns[e->ColumnIndex]->DataType == Int64::typeid || dtMain->Columns[e->ColumnIndex]->DataType == Int32::typeid || dtMain->Columns[e->ColumnIndex]->DataType == Int16::typeid) { Rectangle ^rectColumn; rectColumn = dataGridView1->GetColumnDisplayRectangle(e->ColumnIndex, false); Rectangle ^rectRow; rectRow = dataGridView1->GetRowDisplayRectangle(e->RowIndex, false); toolTip1->ToolTipTitle = "This field is for numbers only."; toolTip1->Show(" ", dataGridView1, rectColumn->Left, rectRow->Top + rectRow->Height); delete rectColumn; delete rectRow; } } private: System::Void dataGridView1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { toolTip1->Hide(dataGridView1); } }; }
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)