Я использую SQLAPI ++ для вставки значений в базу данных SQL, я пытаюсь извлечь действия из шахматных игр и вставить их в виде строки в таблицу действий в базе данных, например, (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
класс, но я считаю, что можно создать такой строковый объект из C-стиля const char*
строка (например, SAString("Connie")
).
Учитывая std::string
Вы можете назвать его c_str
метод, чтобы получить такую строку в стиле C, которая, вероятно, может быть использована для создания вашего SAString
,
Итак, в вашей последовательности вызовов методов:
... = move.black().str();
Если предположить, str
возвращает std::string
Я бы добавил звонок c_str
:
... = move.black().str().c_str();
Других решений пока нет …