首先,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);
}
如果(lol,if; when)你看到任何其他no-nos,请随时指出它们。一个快速跟进的问题,如果变量需要包含转义字符,我该如何忽略它呢?或者我只是使用RE来逃避转义字符?
答案 0 :(得分:1)
但我不能为我的生活找出如何做同样的查询但是 插入变量而不是静态文本。
在char[MAX_STATEMENT_LENGTH]
sql-query缓冲区中的普通std::sprintf
可以完成这项工作(当然,这可以根据您的需要进行改进)。
顺便说一下 - goto
goto FINISHED;
在C和C ++中通常是禁忌。极少数情况下它们是不可避免的,或者比使用基于块的执行控制更有效率,只需确认该规则。
惯用语C ++将throw
heroku pg:reset DATABASE --confirm name-of-your-app