在和的字符串处附加数值

时间:2013-08-20 12:04:41

标签: sql c odbc printf

我正在尝试在表格中插入多个插入内容。为此我创建了一个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);

每次都给我错误。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

您应该使用SQL Parameterssprintf()

最好是前者。