Geoff_Montee

FreeTDS C-string conversion sample

Apr 13th, 2014
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.09 KB | None | 0 0
  1. int ncols, ncol;
  2. char **values;
  3.  
  4. ncols = dbnumcols(dbproc);
  5.  
  6. for (ncol = 0; ncol < ncols; ncol++)
  7. {
  8.     int col_type = dbcoltype(dbproc, ncol + 1);
  9.    
  10.     if (dbwillconvert(col_type, SYBCHAR) != FALSE)
  11.     {
  12.         DBINT data_len;
  13.         BYTE* data;
  14.  
  15.         data_len = dbdatlen(dbproc, ncol + 1);
  16.         data = dbdata(dbproc, ncol + 1);
  17.  
  18.         if (data_len == 0) /* column is NULL */
  19.         {
  20.             values[ncol] = NULL;
  21.         }
  22.  
  23.         else if (data == NULL) /* column is NULL, but probably shouldn't be */
  24.         {
  25.             values[ncol] = NULL;
  26.         }
  27.  
  28.         else
  29.         {
  30.             char *value;
  31.             int ret_value;
  32.             int dest_len = 1000; /* any portable way to get real length of converted value? */
  33.            
  34.             if ((value = malloc(dest_len * sizeof(char))) == NULL) /* malloc failure */
  35.             {
  36.                 /* raise error*/
  37.             }
  38.            
  39.             ret_value = dbconvert(dbproc, col_type, data, data_len, SYBCHAR, (BYTE *) value, -1);
  40.            
  41.             if (ret_value == -1) /* conversion failure */
  42.             {
  43.                 values[ncol] = NULL;
  44.             }
  45.            
  46.             else
  47.             {
  48.                 /* success: move value to values[ncol] */
  49.             }
  50.         }
  51.     }
  52.    
  53.     else /* cannot be converted to SYBCHAR */
  54.     {
  55.         /* raise error */
  56.     }
  57. }
Add Comment
Please, Sign In to add comment