System :: Object для int или double в C ++ / CLI - PullRequest
1 голос
/ 07 апреля 2011

Я беру некоторую информацию из базы данных и хочу использовать ее в расчетах. Но из-за того, что я написал, я не могу преобразовать его в число. Я получаю System::Object^. вот часть кода:

OleDbConnection ^ cnNwind = gcnew OleDbConnection();

cnNwind-> ConnectionString = 
L"Provider = Microsoft.Jet.OLEDB.4.0;" 
L"Data Source = C:\\temp\\A.mdb";

try
{
    // Open the database
    cnNwind->Open();
    Console::WriteLine(L"Connected to database successfully!");

    // Count the customers
    OleDbCommand ^ cmProducts = gcnew OleDbCommand();
    cmProducts->CommandText = L"SELECT ID FROM Table1";
    cmProducts->CommandType = CommandType::Text;
    cmProducts->Connection = cnNwind;

    // Print the result
    Object ^ numberOfProducts = cmProducts->ExecuteScalar();
    Console::Write(L"Number of products: ");
    Console::WriteLine(numberOfProducts);
}
catch (OleDbException ^ pe)
{
    Console::Write(L"Error occurred: ");
    Console::WriteLine(pe->Message);
}
// Close the connection
if (cnNwind->State != ConnectionState::Closed)
{
    cnNwind->Close();
}

Console::WriteLine(L"The database connection is closed...");

Я хочу использовать numberOfProducts в качестве цифры. Я имею в виду тип double или integer. Как я могу преобразовать это?

1 Ответ

4 голосов
/ 07 апреля 2011

Просто используйте safe_cast, чтобы привести Object^ к соответствующему типу.Это подробно описано на этой странице: Как: использовать safe_cast в C ++ / CLI

Object^ numberOfProductsObj = cmProducts->ExecuteScalar();
// IIF the underlying type is System::Int32
int numberOfProducts = safe_cast<int>(numberOfProductsObj);
// or, IIF the underlying type is System::Double
double numberOfProducts = safe_cast<double>(numberOfProductsObj);

Поскольку может быть только один базовый тип (и я не знаю, что этов вашем случае), только один из них будет работать - другой вызовет исключение.Суть в том, что ваш первый шаг - определить фактический базовый тип (предположительно double, float или int).

...