从 std::string 转换为 SAString

converting from std::string to SAString

我正在使用 SQLAPI++ 将值插入到我的 SQL 数据库中,我正在尝试从国际象棋游戏中提取动作并将其作为字符串插入到数据库中的动作 table 中就像这样(action_id=1,action_name=e4)。这是我的代码:

int main()
{
    SAConnection con;
    SACommand cmd;
    try
    {
        con.Connect("test","tester","tester", SA_SQLServer_Client);
        cmd.setConnection(&con);
        std::ifstream pgnfile("sample.pgn");
        pgn::GameCollection games;
        pgnfile >> games;
        for(pgn::GameCollection::iterator itr=games.begin();itr!=games.end();itr++)
        {
            pgn::Game game = *itr;
            pgn::MoveList move_list=game.moves();
            for(pgn::MoveList::iterator itr2=move_list.begin();itr2!=move_list.end();itr2++)
            {
                pgn::Move move=*itr2;
                cmd.setCommandText("insert into actions (action_id,action_name) values (:1,:2)");
                cmd.Param(1).setAsLong() = 1;
                cmd.Param(2).setAsString() = move.black().str(); // the line that cause the error

             }
        }
    }       
}

问题出在那一行:

cmd.Param(2).setAsString() = move.black().str();

它无法从 std::string 转换为 SAString!那么你能告诉我如何进行从 std::string 到 SAString 的转换吗?

我不知道你的具体 SAString class,但我相信应该可以从 C 风格的 const char* 字符串(例如SAString("Connie")).

给定一个 std::string 你可以调用它的 c_str 方法来得到这样一个 C 风格的字符串,它可能被用来构造你的 SAString.

因此,在您的方法调用序列中:

 ... = move.black().str();

假设 str returns 一个 std::string,我会添加对 c_str:

的调用
... = move.black().str().c_str();