18 #define MAX(X,Y) (((X) > (Y)) ? (X) : (Y))
19 #define MIN(X,Y) (((X) < (Y)) ? (X) : (Y))
21 static char software_version[] =
"$Id: rpc_ct_setparam.c 94026 2021-06-15 18:41:00Z ucko $";
40 main(
int argc,
char *argv[])
69 fprintf(stdout,
"%s: submit a stored procedure using ct_setparam \n", __FILE__);
71 fprintf(stdout,
"Trying login\n");
75 fprintf(stderr,
"Login failed\n");
84 ret =
run_command(
cmd,
"IF EXISTS(SELECT * FROM SYSOBJECTS WHERE name = 'sample_rpc' AND type = 'P') DROP PROCEDURE sample_rpc");
86 strcpy(cmdbuf,
"create proc sample_rpc (@intparam int, \
87 @sintparam smallint output, @floatparam float output, \
88 @moneyparam money output, \
89 @dateparam datetime output, @charparam char(20) output, \
90 @binaryparam varbinary(2000) output) \
93 strcat(cmdbuf,
"select @intparam, @sintparam, @floatparam, @moneyparam, \
94 @dateparam, @charparam, @binaryparam \
95 select @sintparam = @sintparam + @intparam \
96 select @floatparam = @floatparam + @intparam \
97 select @moneyparam = @moneyparam + convert(money, @intparam) \
98 select @dateparam = getdate() \
99 select @charparam = \'The char parameters\' \
100 select @binaryparam = @binaryparam \
101 print \'This is the message printed out by sample_rpc.\'");
106 fprintf(stderr,
"create proc failed\n");
118 strcpy(rpc_name,
"sample_rpc");
119 strcpy(moneystring,
"300.90");
145 fprintf(stderr,
"ct_cmd_props() failed");
149 fprintf(stderr,
"ct_con_props() failed");
154 fprintf(stderr,
"cs_convert() failed");
162 fprintf(stderr,
"ct_command(CS_RPC_CMD) failed");
172 memset(&datafmt, 0,
sizeof(datafmt));
173 strcpy(datafmt.
name,
"@intparam");
183 fprintf(stderr,
"ct_setparam(int) failed");
187 strcpy(datafmt.
name,
"@sintparam");
197 fprintf(stderr,
"ct_setparam(smallint) failed");
201 strcpy(datafmt.
name,
"@floatparam");
211 fprintf(stderr,
"ct_setparam(float) failed");
216 strcpy(datafmt.
name,
"@moneyparam");
226 fprintf(stderr,
"ct_setparam(money) failed");
230 strcpy(datafmt.
name,
"@dateparam");
245 fprintf(stderr,
"ct_setparam(datetime4) failed");
248 strcpy(datafmt.
name,
"@charparam");
263 fprintf(stderr,
"ct_setparam(char) failed");
267 strcpy(datafmt.
name,
"@binaryparam");
278 fprintf(stderr,
"ct_setparam(binary) failed");
286 fprintf(stderr,
"ct_send(RPC) failed");
292 fprintf(stderr,
"ex_display_results failed\n");
299 fprintf(stderr,
"ct_send(RPC) failed");
305 fprintf(stderr,
"ex_display_results failed\n");
312 fprintf(stdout,
"Trying logout\n");
316 fprintf(stderr,
"Logout failed\n");
342 switch ((
int) res_type) {
349 switch ((
int) res_type) {
351 fprintf(stdout,
"\nROW RESULTS\n");
355 fprintf(stdout,
"\nPARAMETER RESULTS\n");
359 fprintf(stdout,
"\nSTATUS RESULTS\n");
376 fprintf(stderr,
"ct_res_info(CS_NUMDATA) failed");
384 fprintf(stderr,
"ct_res_info(CS_NUMDATA) returned zero columns");
396 if (coldata ==
NULL) {
397 fprintf(stderr,
"malloc coldata failed \n");
402 if (outdatafmt ==
NULL) {
404 fprintf(stderr,
"malloc outdatafmt failed \n");
408 for (
i = 0;
i < num_cols;
i++) {
411 fprintf(stderr,
"ct_describe failed \n");
422 fprintf(stderr,
"malloc coldata.value failed \n");
427 & coldata[
i].indicator);
430 fprintf(stderr,
"ct_bind failed \n");
435 for (j = 0; j <
i; j++) {
450 row_count = row_count + rows_read;
456 fprintf(stdout,
"Error on row %d.\n", row_count);
464 for (
i = 0;
i < num_cols;
i++) {
468 fprintf(stdout,
"%s", coldata[
i].
value);
475 if (
i != num_cols - 1) {
478 for (j = 0; j < disp_len; j++) {
483 fprintf(stdout,
"\n");
490 for (
i = 0;
i < num_cols;
i++) {
505 fprintf(stdout,
"All done processing rows.\n");
513 fprintf(stderr,
"ct_fetch returned CS_FAIL\n");
521 fprintf(stderr,
"ct_fetch returned %d\n", ret);
531 fprintf(stderr,
"ct_res_info(msg_id) failed");
534 fprintf(stdout,
"ct_result returned CS_MSG_RESULT where msg id = %d.\n", msg_id);
555 fprintf(stderr,
"ct_results returned CS_CMD_FAIL.");
562 fprintf(stderr,
"ct_results returned unexpected result type.");
583 fprintf(stderr,
"ct_results failed.");
590 fprintf(stderr,
"ct_results returned unexpected result type.");
605 switch ((
int)
column->datatype) {
668 for (
i = 0;
i < numcols;
i++) {
670 fprintf(stdout,
"%s",
columns[
i].name);
673 for (j = 0; j < l; j++) {
680 for (
i = 0;
i < numcols;
i++) {
683 for (j = 0; j < l; j++) {
696 fprintf(stdout,
"\nOpen Client Message:\n");
699 fprintf(stdout,
"Message String: %s\n", errmsg->
msgstring);
701 fprintf(stdout,
"Operating System Error: %s\n", errmsg->
osstring);
711 fprintf(stdout,
"\nServer message:\n");
712 fprintf(stdout,
"Message number: %ld, Severity %ld, ", (
long) srvmsg->
msgnumber, (
long) srvmsg->
severity);
713 fprintf(stdout,
"State %ld, Line %ld\n", (
long) srvmsg->
state, (
long) srvmsg->
line);
716 fprintf(stdout,
"Server '%s'\n", srvmsg->
svrname);
720 fprintf(stdout,
" Procedure '%s'\n", srvmsg->
proc);
723 fprintf(stdout,
"Message String: %s\n", srvmsg->
text);
#define CS_DATETIME4_TYPE
#define CS_LONGBINARY_TYPE
#define CS_VARBINARY_TYPE
CS_RETCODE cs_convert(CS_CONTEXT *ctx, CS_DATAFMT *srcfmt, CS_VOID *srcdata, CS_DATAFMT *destfmt, CS_VOID *destdata, CS_INT *resultlen)
struct _cs_money CS_MONEY
CS_RETCODE try_ctlogin(CS_CONTEXT **ctx, CS_CONNECTION **conn, CS_COMMAND **cmd, int verbose)
CS_RETCODE run_command(CS_COMMAND *cmd, const char *sql)
CS_RETCODE try_ctlogout(CS_CONTEXT *ctx, CS_CONNECTION *conn, CS_COMMAND *cmd, int verbose)
static CS_CONNECTION * conn
int main(int argc, char *argv[])
static CS_INT ex_display_dlen(CS_DATAFMT *column)
struct _ex_column_data EX_COLUMN_DATA
static void * no_unused_var_warn[]
CS_RETCODE ex_clientmsg_cb(CS_CONTEXT *context, CS_CONNECTION *connection, CS_CLIENTMSG *errmsg)
static CS_RETCODE ex_display_header(CS_INT numcols, CS_DATAFMT columns[])
static char software_version[]
static CS_INT ex_display_results(CS_COMMAND *cmd)
CS_RETCODE ex_servermsg_cb(CS_CONTEXT *context, CS_CONNECTION *connection, CS_SERVERMSG *errmsg)
CS_RETCODE ct_command(CS_COMMAND *cmd, CS_INT type, const CS_VOID *buffer, CS_INT buflen, CS_INT option)
CS_RETCODE ct_results(CS_COMMAND *cmd, CS_INT *result_type)
CS_RETCODE ct_res_info(CS_COMMAND *cmd, CS_INT type, CS_VOID *buffer, CS_INT buflen, CS_INT *out_len)
CS_RETCODE ct_callback(CS_CONTEXT *ctx, CS_CONNECTION *con, CS_INT action, CS_INT type, CS_VOID *func)
CS_RETCODE ct_fetch(CS_COMMAND *cmd, CS_INT type, CS_INT offset, CS_INT option, CS_INT *rows_read)
CS_RETCODE ct_cmd_props(CS_COMMAND *cmd, CS_INT action, CS_INT property, CS_VOID *buffer, CS_INT buflen, CS_INT *outlen)
CS_RETCODE ct_send(CS_COMMAND *cmd)
CS_RETCODE ct_bind(CS_COMMAND *cmd, CS_INT item, CS_DATAFMT *datafmt, CS_VOID *buffer, CS_INT *copied, CS_SMALLINT *indicator)
CS_RETCODE ct_con_props(CS_CONNECTION *con, CS_INT action, CS_INT property, CS_VOID *buffer, CS_INT buflen, CS_INT *out_len)
CS_RETCODE ct_describe(CS_COMMAND *cmd, CS_INT item, CS_DATAFMT *datafmt)
CS_RETCODE ct_setparam(CS_COMMAND *cmd, CS_DATAFMT *datafmt, CS_VOID *data, CS_INT *datalen, CS_SMALLINT *indicator)
static const char * column
static const column_t columns[]
const GenericPointer< typename T::ValueType > T2 value
static CS_CONTEXT * context