SQL句柄以及如何正确创建一个?

时间:2014-08-22 16:11:53

标签: sql c sql-server

此代码不起作用(我从另一个问题得到这个),因为它的参数太少: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);
}

2 个答案:

答案 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

另一个 SQLExecDirect