此代码不起作用(我从另一个问题得到这个),因为它的参数太少:sqldirect需要一个处理程序和一个长度。
我从高级别了解一个句柄是什么,但我只看到它们在准备和绑定语句时使用,而不仅仅是像这样直接执行一次的语句。我正在学习SQL,我发现所有这些都非常令人困惑。
有人可以解释如何处理这段代码,也许可以指导我找一本好的SQL书或学习资源吗?很难在网上找到我可以关注的任何信息。
for (n = 0; n < 10000; n++) {
char sql[1000];
sprintf(sql, "insert into mytable (cola, colb) values(%d,%d)", n, n);
SQLExecDirect(sql);
}
编辑:oops ..我以为我修复了我发布的代码中的错误。这个问题假设sprintf行没有遗漏参数:
for (n = 0; n < 10000; n++) {
char sql[1000];
sprintf(sql, "insert into mytable (cola, colb) values(%d,%d)", n, n);
SQLExecDirect(sql);
}
答案 0 :(得分:1)
正如@DanielE指出的那样,你忘记了sprintf
的第一个参数,无论如何这在for
循环中更合适:
SQLPrepare("insert into mytable (cola, colb) values(?,?);");
for (n = 0; n < 10000; n++) {
SQLBindParameter(1, n);
SQLBindParameter(2, n);
SQLExecute;
}
答案 1 :(得分:0)
首先,您的声明:
SQLExecDirect(sql);
缺少一些参数。 SQLExecDirect 的原型需要3个参数,包括句柄:
SQLRETURN SQLExecDirect(
SQLHSTMT StatementHandle,
SQLCHAR * StatementText,
SQLINTEGER TextLength);
以下是显示如何获取SQL句柄的代码段,包括 SQLHSTMT :
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
/* connect to the data source */
SQLAllocHandle(SQL_HANDLE_ENV, dbc, &stmt);
/* do something with the statement handle e.g. issue sql */
使用获得的手柄,并在不同的帖子中显示sprintf校正,可以这样调用:
SQLExecDirect(stmt, sql, strlen(sql)); //sql is string containing statement
您还要求提供链接。以下是一些:(还有更多)
Handles and environment related
另一个 SQLExecDirect