Associando parâmetros
Para que a instrução possa ser executada, cada marcador de parâmetro em uma instrução SQL deve ser associado a uma variável no aplicativo. Isto é feito chamando a função SQLBindParameter. SQLBindParameter descreve a variável de programa (endereço, tipo de dados C e assim por diante) para o driver. Ela também identifica o marcador de parâmetro indicando seu valor ordinal e, em seguida, descreve as características do objeto SQL que representa (tipo de dados SQL, precisão e assim por diante).
Marcadores de parâmetro podem ser associados ou reassociados a qualquer momento, antes de uma instrução ser executada. Uma associação de parâmetro permanece em vigor até ocorrer um dos seguintes eventos:
Uma chamada para SQLFreeStmt com o conjunto de parâmetros Option definido como SQL_RESET_PARAMS libera todos os parâmetros associados ao identificador de instrução.
Uma chamada para SQLBindParameter com ParameterNumber definido como o ordinal de um marcador de parâmetro associado automaticamente libera a associação anterior.
Um aplicativo também pode associar parâmetros a matrizes de variáveis de programa para processar uma instrução SQL em lotes. Há dois tipos de associação de matriz:
A associação em colunas é feita quando cada um dos parâmetros é associado à sua própria matriz de variáveis.
A associação em colunas é especificada chamando SQLSetStmtAttr com Attribute definido como SQL_ATTR_PARAM_BIND_TYPE e ValuePtr definido como SQL_PARAM_BIND_BY_COLUMN.
A associação em linhas é feita quando todos os parâmetros na instrução SQL são associados como uma unidade a uma matriz de estruturas que contém cada uma das variáveis para os parâmetros.
A associação em linhas é especificada chamando SQLSetStmtAttr com Attribute definido como SQL_PARAM_ROW_BIND_TYPE and ValuePtr definido como o tamanho da estrutura que contém as variáveis do programa.
Quando o driver ODBC do SQL Server Native Client envia parâmetros de cadeia de caracteres ou binária para o servidor, ele preenche os valores até o comprimento especificado no parâmetro ColumnSize de SQLBindParameter. Se um aplicativo ODBC 2.x especificar 0 para ColumnSize, o driver preencherá o valor do parâmetro com a precisão do tipo de dados. A precisão é 8000 quando houver conexão a servidores do SQL Server, 255 quando houver conexões a versões anteriores do SQL Server. ColumnSize está em bytes para colunas variantes.
O SQL Server oferece suporte à definição de nomes para parâmetros de procedimento armazenado. O ODBC 3.5 também introduziu o suporte a parâmetros nomeados usados ao chamar procedimentos armazenados do SQL Server. Esse suporte pode ser usado para:
Chamar um procedimento armazenado e fornecer valores para um subconjunto dos parâmetros definidos para o procedimento armazenado.
Especificar os parâmetros no aplicativo em uma ordem diferente daquela especificada quando o procedimento armazenado foi criado.
O suporte aos parâmetros nomeados existe somente ao usar a instrução Transact-SQLEXECUTE ou a sequência de escape CALL do ODBC para executar um procedimento armazenado.
Se SQL_DESC_NAME for definido para um parâmetro de procedimento armazenado, todos os parâmetros de procedimento armazenado na consulta também deverão definir SQL_DESC_NAME. Se forem usados literais em chamadas de procedimento armazenado, onde parâmetros têm SQL_DESC_NAME definido, o literais deverão usar o formato 'name=value', onde name é o nome do parâmetro de procedimento armazenado (por exemplo, @ p1). Para obter mais informações, consulte Associando parâmetros por nome (parâmetros nomeados).