在managed C++应用中利用ADO.NET
摘要:
文中就用ADO.NET数据工具会见数据库及从数据库回取数据的根基道理作出示例说明。
正文:
本文提供了一个由应用领导生成的基于尺度Managed C++应用的实例,它用.NET的ADODataReader类从数据库中取回一个只读(read-only)、只前移(forward-only)的数据流。就是因为在内存中一次仅一行,可用数据读取器(Data Reader)发生应用执行和化简系统套头(overhead)。在主源文件增加如下代码能获取对具有数据库支持的.NET Framework类的会见:
#using
// Add access to .NET Framework classes.
#using
#using
using namespace System;
using namespace System::Data::ADO;
为从数据库中取回数据,先用ADOConnection类生成一个对数据库的毗连,然后配置ConnectionString属性指定命据源,用ADOConnection类的Open()要领连到数据库。
之后用ADOCommand类生成一个command工具以获取数据,执行呼吁返回一个数据读取器(data reader)类的引用,即ADODataReader类的一个实例。
接着轮回挪用ADODataReader类的Read()成员一次一行地遍历所有数据行,所取得的数据象一个项目荟萃(items collection)一样可会见,我们可用索引值或列名来获取各项。留意:在会见ADODataReader工具中的数据前,应先挪用Read要领。
int main(void)
{
ADOConnection* connection; // ADO connection.
ADOCommand* command; // ADO command
ADODataReader* dataReader; // ADO data reader
try
{
// Create connection, set connection string and open connection to
// specified database.
connection = new ADOConnection();
connection->ConnectionString = S"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\\Data\\grocertogo.mdb;Persist Security Info=False";
connection->Open();
// Create command and get data reader by executing this command.
command = new ADOCommand(S"SELECT ProductName, UnitPrice FROM Products", connection);
command->Execute(&dataReader);
// Print table header
Console::WriteLine(S"_____________________________________");
Console::WriteLine(S"Product | Price");
Console::WriteLine(S"_____________________________________");
// Iterate through rows set and print data.
while(dataReader->Read())
Console::WriteLine(S"{0, -30}| {1}", dataReader->get_Item("ProductName"), dataReader->get_Item("UnitPrice"));
// Print table footer.
Console::WriteLine(S"_____________________________________");
// Close DataReader
dataReader->Close();
// Close connection.
connection->Close();
}
catch(Exception* e)
{
// Print error message and close connection.
Console::WriteLine("Error occured: {0}", e->Message);
if (dataReader && !dataReader->IsClosed)
dataReader->Close();
if (connection->State == DBObjectState::Open)
connection->Close();
}
Console::WriteLine("Press ENTER to continue");
Console::ReadLine();
return 0;
}