Delen via


SQL-instructies die tijdens runtime zijn samengesteld

Toepassingen die ad-hocanalyse uitvoeren, bouwen vaak SQL-instructies tijdens runtime. Een spreadsheet kan bijvoorbeeld toestaan dat een gebruiker kolommen selecteert waaruit gegevens moeten worden opgehaald:

// SQL_Statements_Constructed_at_Run_Time.cpp  
#include <windows.h>  
#include <stdio.h>  
#include <sqltypes.h>  
  
int main() {  
   SQLCHAR *Statement = 0, *TableName = 0;  
   SQLCHAR **TableNamesArray, **ColumnNamesArray = 0;  
   BOOL *ColumnSelectedArray = 0;  
   BOOL  CommaNeeded;  
   SQLSMALLINT i = 0, NumColumns = 0;  
  
   // Use SQLTables to build a list of tables (TableNamesArray[]). Let the  
   // user select a table and store the selected table in TableName.  
  
   // Use SQLColumns to build a list of the columns in the selected table  
   // (ColumnNamesArray). Set NumColumns to the number of columns in the  
   // table. Let the user select one or more columns and flag these columns  
   // in ColumnSelectedArray[].  
  
   // Build a SELECT statement from the selected columns.  
   CommaNeeded = FALSE;  
   Statement = (SQLCHAR*)malloc(8);  
   strcpy_s((char*)Statement, 8, "SELECT ");  
  
   for (i = 0 ; i = NumColumns ; i++) {  
      if (ColumnSelectedArray[i]) {  
         if (CommaNeeded)  
            strcat_s((char*)Statement, sizeof(Statement), ",");  
         else  
            CommaNeeded = TRUE;  
         strcat_s((char*)Statement, sizeof(Statement), (char*)ColumnNamesArray[i]);  
      }  
   }  
  
   strcat_s((char*)Statement, 15, " FROM ");  
   // strcat_s((char*)Statement, 100, (char*)TableName);  
  
   // Execute the statement . It will be executed once, do not prepare it.  
   // SQLExecDirect(hstmt, Statement, SQL_NTS);  
}  

Een andere klasse toepassingen die vaak SQL-instructies tijdens runtime samenstelt, zijn ontwikkelomgevingen voor toepassingen. De instructies die ze maken, zijn echter in code vastgelegd in de toepassing die ze bouwen, waar ze meestal kunnen worden geoptimaliseerd en getest.

Toepassingen die SQL-instructies tijdens runtime maken, kunnen de gebruiker enorm flexibel maken. Zoals u kunt zien in het voorgaande voorbeeld, dat zelfs geen ondersteuning biedt voor dergelijke algemene bewerkingen als WHERE-componenten , ORDER BY-componenten of joins, is het samenstellen van SQL-instructies tijdens runtime enorm complexer dan hardcoderingsinstructies. Bovendien is het testen van dergelijke toepassingen problematisch omdat ze een willekeurig aantal SQL-instructies kunnen maken.

Een potentieel nadeel van het maken van SQL-instructies tijdens runtime is dat het veel meer tijd kost om een instructie te maken dan een in code vastgelegde instructie te gebruiken. Gelukkig is dit zelden een probleem. Dergelijke toepassingen zijn meestal gebruikersinterfaceintensief en de tijd die de toepassing besteedt aan het maken van SQL-instructies is over het algemeen klein in vergelijking met de tijd die de gebruiker besteedt aan het invoeren van criteria.