使用SqlConnection在Managed C ++中连接和查询数据库

时间:2014-04-09 10:24:00

标签: c++ sql visual-studio-2012 sqlconnection

我在Visual Studio 2012中使用C ++构建项目,并且我已经开始编写一些用于数据库访问的类。使用SQL Server data tools我设法在我的解决方案中创建一个SQL项目。

现在,我的问题是:如何使用System :: Data :: SqlClient命名空间中的类型连接到我的代码中的数据库?我得到的所有示例都使用数据库作为参考。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果我的回答对某人有帮助,我使用了类SqlDataReader和SqlCommand来从db中选择一些数据。请注意,我是从之前创建的App.Config中获取ConnectionString的(how it could be done)。

SqlDataReader getSqlDataReader(String ^_sql)
{
    SqlDataReader ^_sqlDataReader = nullptr;

    SqlConnection ^_connection = gcnew SqlConnection();

    ConnectionStringSettings ^connectionSettings = ConfigurationManager::ConnectionStrings["AppDefaultConnection"];
    this->_connection->ConnectionString = connectionSettings->ConnectionString;

    try {
        this->_connection->Open();
    } 

    catch (Exception ^_exception)
    {
        Console::WriteLine("Error : "  + _exception->Message);
        return nullptr;
    }

    try
    {
        SqlCommand ^_sqlCommand = gcnew SqlCommand(_sql,_connection);
        _sqlDataReader = _sqlCommand->ExecuteReader();
    }

    catch(Exception ^_exception)
    {
        Console::WriteLine("Error : "  + _exception->Message);
        return nullptr;
    }

    return _sqlDataReader;
}

要正确构建SQL,我们应该知道类SqlParameter(example for C#)并避免SQL注入攻击。

使用getSqlDataReader函数:

   SqlDataReader ^reader = getSqlDataReader(yourParameterizedQueryString);

        List<TypeToFetch>^ data = gcnew List<TypeToFetch^>();
        if(reader != nullptr && reader->HasRows)
        {
            TypeToFetch^ typeToFetch = gcnew TypeToFetch();
            while(reader->Read())
            {
                    // example
                TypeToFetch->id = (int) reader["Id"];
                TypeToFetch->name = reader["Name"]->ToString();
                data->Add(typeToFetch);
            }
        }

This question/answer可以帮助INSERT。