首先,C++ 对我来说是一门新语言,尽管我已经用其他几种语言编写过代码;所以请原谅我对 C++ 的无知。我已经弄清楚了如何进行数据库连接和简单的查询;然而,完全让我感到困惑的是在上述查询中使用变量。
我得到了以下查询,它很乐意将数据插入我的数据库,但我一生都无法弄清楚如何执行相同的查询但插入变量而不是静态文本。
if (SQL_SUCCESS != SQLExecDirect(sqlstatementhandle, (SQLCHAR*)"insert into testtable (name) values ('testname');", SQL_NTS)) {
show_error(SQL_HANDLE_STMT, sqlstatementhandle);
goto FINISHED;
}
我已经做了很多阅读,但似乎没有人给出一个明确的,甚至是相同的答案。唯一不变的主题是,出于显而易见的原因,我应该使用准备好的语句。然而,即使是这种方法,因人而异。
使用 VS2015 和 SQL Server 2014。
更新
感谢所有的指点,我已经添加了下面的代码,现在可以愉快地插入变量了!
char* newvar;
newvar = "preptest";
SQLCHAR newquery[100];
sprintf((char*)newquery, "INSERT INTO testtable (name) VALUES ('%s');", newvar);
if (SQL_SUCCESS != SQLExecDirect(sqlstatementhandle, newquery, SQL_NTS)) {
show_error(SQL_HANDLE_STMT, sqlstatementhandle);
}
如果(哈哈,如果;何时)您看到任何其他禁忌,请随时指出。一个快速跟进的问题,如果变量需要包含转义字符,我该如何忽略它?还是我只使用 RE 来转义转义字符?
最佳答案
but I can't for the life of me work out how to do the same query but inserting a variable instead of static text.
普通std::sprintf
放入一个 char[MAX_STATEMENT_LENGTH]
sql-query buffer 就可以完成这项工作(当然,这可以根据您的需要进行细化)。
顺便说一句 - goto
goto FINISHED;
在 C 和 C++ 中通常是禁忌。在极少数情况下,它们是不可避免的,或者比使用基于 block 的执行控制更有效,只需确认该规则。
惯用的 C++ 将是 throw
并处理 try/catch-block 中的异常
关于c++ - 在 MSSQL 查询中使用 C++ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612442/