C++ CLI 如何从 Access 数据库中的 table 中读取数据?
C++ CLI How to read data from a table in Access database?
例如,如果我有一个 Access 数据库 Data.accdb,其中包含 2 个表:Table1 和 Table2,我如何从 Table1 读取数据?不过我知道如何打开 Sql 连接。
#using <system.data.dll>
using namespace System::Data;
using namespace System::Data::SqlClient;
using namespace System::Data::OleDb;
SqlConnection ^connection = gcnew SqlConnection(L"server=local;Trusted_Connection=yes;database=Data;");
connection->Open();
但除此之外,我不知道下一步该做什么。如何打开Table1并从中读取数据,比如读取ID列?
您可以使用 OleDb 来操作 Access 数据库。
#include <msclr\auto_handle.h>
int main(array<System::String ^> ^args)
{
using namespace System;
using namespace System::Data::OleDb;
OleDbConnection connection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\MyDatabase.accdb;Persist Security Info=False;");
connection.Open();
// Reading all records
{
msclr::auto_handle<OleDbCommand> command = connection.CreateCommand();
command->CommandText = "select * from Table1";
msclr::auto_handle<OleDbDataReader> reader = command->ExecuteReader();
while (reader->Read())
{
Console::WriteLine(
"ID={0}, DESCRIPTION={1}",
reader.get()["ID"],
reader.get()["DESCRIPTION"]);
}
}
// Insert new record
{
msclr::auto_handle<OleDbCommand> command = connection.CreateCommand();
command->CommandText = "insert into Table1 (ID, DESCRIPTION) values (3, 'THREE')";
command->ExecuteNonQuery();
}
// Changing the DESCRIPTION field for all records
{
msclr::auto_handle<OleDbCommand> selectCommand = connection.CreateCommand();
selectCommand->CommandText = "select * from Table1";
msclr::auto_handle<OleDbDataReader> reader = selectCommand->ExecuteReader();
while (reader->Read())
{
auto newDescription = reader.get()["DESCRIPTION"]->ToString();
newDescription += " - UPDATED!";
msclr::auto_handle<OleDbCommand> updateCommand = connection.CreateCommand();
updateCommand->CommandText = "update Table1 set DESCRIPTION=? where ID=?";
updateCommand->Parameters->AddWithValue("DESCRITPION", newDescription);
updateCommand->Parameters->AddWithValue("ID", reader.get()["ID"]);
updateCommand->ExecuteNonQuery();
}
}
return 0;
}
例如,如果我有一个 Access 数据库 Data.accdb,其中包含 2 个表:Table1 和 Table2,我如何从 Table1 读取数据?不过我知道如何打开 Sql 连接。
#using <system.data.dll>
using namespace System::Data;
using namespace System::Data::SqlClient;
using namespace System::Data::OleDb;
SqlConnection ^connection = gcnew SqlConnection(L"server=local;Trusted_Connection=yes;database=Data;");
connection->Open();
但除此之外,我不知道下一步该做什么。如何打开Table1并从中读取数据,比如读取ID列?
您可以使用 OleDb 来操作 Access 数据库。
#include <msclr\auto_handle.h>
int main(array<System::String ^> ^args)
{
using namespace System;
using namespace System::Data::OleDb;
OleDbConnection connection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\MyDatabase.accdb;Persist Security Info=False;");
connection.Open();
// Reading all records
{
msclr::auto_handle<OleDbCommand> command = connection.CreateCommand();
command->CommandText = "select * from Table1";
msclr::auto_handle<OleDbDataReader> reader = command->ExecuteReader();
while (reader->Read())
{
Console::WriteLine(
"ID={0}, DESCRIPTION={1}",
reader.get()["ID"],
reader.get()["DESCRIPTION"]);
}
}
// Insert new record
{
msclr::auto_handle<OleDbCommand> command = connection.CreateCommand();
command->CommandText = "insert into Table1 (ID, DESCRIPTION) values (3, 'THREE')";
command->ExecuteNonQuery();
}
// Changing the DESCRIPTION field for all records
{
msclr::auto_handle<OleDbCommand> selectCommand = connection.CreateCommand();
selectCommand->CommandText = "select * from Table1";
msclr::auto_handle<OleDbDataReader> reader = selectCommand->ExecuteReader();
while (reader->Read())
{
auto newDescription = reader.get()["DESCRIPTION"]->ToString();
newDescription += " - UPDATED!";
msclr::auto_handle<OleDbCommand> updateCommand = connection.CreateCommand();
updateCommand->CommandText = "update Table1 set DESCRIPTION=? where ID=?";
updateCommand->Parameters->AddWithValue("DESCRITPION", newDescription);
updateCommand->Parameters->AddWithValue("ID", reader.get()["ID"]);
updateCommand->ExecuteNonQuery();
}
}
return 0;
}