我有一个执行大量SQL插入的脚本,但我一直在尝试添加一个将select查询的返回值分配给变量的部分。
我用来插入的代码是:
if (SQL_SUCCESS != SQLExecDirect(sqlstatementhandle, (SQLCHAR*)"BULK INSERT mytable FROM 'C:/dir/myfile.csv' WITH (FIRSTROW = 1, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n');", SQL_NTS)) {
show_error(SQL_HANDLE_STMT, sqlstatementhandle);
一切正常,但我无法弄清楚如何使用查询的输出。输出将是一个int值,我想分配给一个int变量。
道歉,如果这是一个非常明显的事情。
修改
根据以下答案,以下内容现在对我有用。谢谢!
SQLRETURN retcode;
SQLHSTMT hstmt; // I use my own stmnthndl(sqlstatementhandle) below, this line left in for demonstration
retcode = SQLExecDirect(sqlstatementhandle, (SQLCHAR*)"SELECT count(*) FROM mytable;",SQL_NTS);
SQLINTEGER sCustID;
SQLLEN cbCustID;
if (retcode == SQL_SUCCESS) {
while (TRUE) {
retcode = SQLFetch(sqlstatementhandle);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
// get the first column
SQLGetData(sqlstatementhandle, 1, SQL_C_ULONG, &sCustID, 0, &cbCustID);
//You can now print it
cout << "CustID:" << sCustID;
}
else {
break;
}
}
}
答案 0 :(得分:1)
您可以使用SQLGetData
获取结果集中单个列的数据。从this example开始,首先使用SQLExecDirect
执行SQL查询:
using System.Web.Script.Serialization;
var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string,dynamic>>(jsonText);
Console.WriteLine(dict["Brands"]); /
Console.WriteLine(dict["Products"]);
然后您可以获取数据,我会显示相同example的简化版本:
SQLRETURN retcode;
SQLHSTMT hstmt;
retcode = SQLExecDirect(hstmt,
(SQLCHAR*)"SELECT CUSTID, NAME, PHONE FROM CUSTOMERS ORDER BY 2, 1, 3",
SQL_NTS);
SQLGetData
的语法是:
SQLINTEGER sCustID, cbCustID; if (retcode == SQL_SUCCESS) { while (TRUE) { retcode = SQLFetch(hstmt); if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) { show_error(); } if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){ // get the first column SQLGetData(hstmt, 1, SQL_C_ULONG, &sCustID, 0, &cbCustID); //You can now print it fprintf(out, "CustID: %-5d", sCustID); } else { break; } } }
使用:
SQLRETURN SQLGetData(
SQLHSTMT StatementHandle,
SQLUSMALLINT Col_or_Param_Num,
SQLSMALLINT TargetType,
SQLPOINTER TargetValuePtr,
SQLLEN BufferLength,
SQLLEN * StrLen_or_IndPtr);
:执行的SQL查询的句柄。 StatementHandle
:列号,从1开始。Col_or_Param_Num
:数据类型,您可以使用TargetType
,请参阅SQL data types和C data types。 SQL_INTEGER
:指向输出数据的指针。 TargetValuePtr
:长度,但不用于整数等固定长度数据。 BufferLength
:可选的输出,可以返回数据长度或错误代码。
注意:就像您评论的那样,您可能需要将SQL查询转发给StrLen_or_IndPtr
,因为SQLCHAR *
是SQLCHAR
,请参阅the data types。