1

我正在尝试在表中插入多个插入。为此,我创建了一个 int 列表并使用 for 循环函数插入,但我无法编写我想做的正确代码。我需要这样的东西

for(i=0;i<1800;i++)
{

    retcode =  SQLPrepare(hstmt,(SQLCHAR *)"insert into dbo.vivtest values(i)",SQL_NTS);
    if (retcode != SQL_SUCCESS)
        {
            printf("Error in SQLPrepare - insert\n");
            odbc_Error(henv,hdbc,hstmt);
            getch();
        }
    else
        printf("Successfull execution of  %d th  Prepare\n",i);

每次都给我错误。

4

2 回答 2

4

以下是关于SQLPrepare()以及如何绑定参数的有用链接。绑定参数是一种将变量内容插入 SQL 字符串的安全方式,并且以这种方式制作的准备好的语句是多次执行语句的有效方式。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms716365(v=vs.85).aspx

它提供了一个将参数绑定到 SQL 查询的示例。给出以下示例:

SQLPrepare(hstmt, "UPDATE Parts SET Price = ? WHERE PartID = ?", SQL_NTS);

在 SQL 字符串中,您可以看到一些?(问号)。这些就像 SQL 字符串中的占位符,然后您可以“将参数绑定到”(即,替换为变量内容)。

继续 MSDN 示例...

SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 7, 0,
                  &Price, 0, &PriceInd);
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 10, 0,
                  &PartID, 0, &PartIDInd);

第一个语句用变量中的浮点值替换第一个问号,Price第二个绑定用变量中的整数替换第二个问号PartID

你的准备语句应该看起来像......

SQLINTEGER    iInd;
SQLUINTEGER   i;
...
...
retcode =  SQLPrepare(hstmt,(SQLCHAR *)"insert into dbo.vivtest values(?)",SQL_NTS);
...
...
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 10, 0,
              &i, 0, &iInd);
于 2013-08-20T12:10:35.223 回答
3

您应该使用SQL 参数sprintf().

最好是前者。

于 2013-08-20T12:08:51.643 回答