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置き換え、2 番目のバインドは 2 番目の疑問符を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 に答える