我正在尝试在表格中插入多个插入内容。为此我创建了一个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);
每次都给我错误。
答案 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 Parameters或sprintf()
。
最好是前者。