[freetds] a question about transaction

Thompson, Bill D (London) bill_d_thompson at ml.com
Mon Feb 13 08:16:01 EST 2006


Hi,

You say you have a "strange instance" where "no code is returned"...

from where is "no code returned" ? from ct_results ? or from your run_command() function ?

what return code are you trying to capture ?
is it the successful completion of all the commands you have submitted ?

I would capture and print out all the returns from ct_results, which should help to make it clearer.

I would say, as long as you never get CS_CMD_FAIL returned from ct_results() your commands have worked.

By the way, I think you should implement the addnewcarduser functionality as  
a stored procedure, into which you pass username, password and userip 
(maybe current date too, although the stored proc could work that out for you.)


Bill





-----Original Message-----
From: freetds-bounces at lists.ibiblio.org [mailto:freetds-bounces at lists.ibiblio.org] On Behalf Of lichunlei at kingsoft.com
Sent: 13 February 2006 12:24
To: freetds-request at lists.ibiblio.org
Cc: freetds at lists.ibiblio.org
Subject: [freetds] a question about transaction


hi:

   i am writing a programme which execute a transaction by freetds ,  however  , there is a strange instance that no  code is returned ,but the sqlserver data had been influenced  .   i need the returnd code to execute the next step.  but nothing.


i use the function run_command which is  programmed by myself to execute sql sentence which have no returned result. 


function:


/* Run commands from which we expect no results returned */ 
// Update,insert,delete
static inline CS_RETCODE run_command(CS_COMMAND * cmd, const char *sql )
{
 CS_RETCODE ret, results_ret;
 CS_INT result_type;
 
 if (cmd == NULL) return CS_FAIL;
 if (ct_command(cmd, CS_LANG_CMD, sql, CS_NULLTERM, CS_UNUSED) != CS_SUCCEED) return CS_FAIL;
 if (ct_send(cmd) != CS_SUCCEED) return CS_FAIL;

 while ( (results_ret = ct_results( cmd , &result_type ) ) == CS_SUCCEED )
 {
  switch ((int) result_type) 
  {
  case CS_CMD_SUCCEED:
   break;
  case CS_CMD_DONE:
   break;
  case CS_CMD_FAIL:
   return E_NORMAL;
  default:
   return CS_FAIL;
  }
 } 
 switch ( (int) results_ret ) 
 {
 case CS_END_RESULTS:
  break;
 case CS_FAIL:
 default:
  return CS_FAIL;
 }

 return CS_SUCCEED;
}


the transaction is :
snprintf( szInsert,
  SQL_BUFFER_LENGTH,
  "BEGIN TRANSACTION addnewcarduser "
  "Insert into authinfo2( uid,password) values( \'%s\',\'%s\')"
  "Insert into secuinfo( uid,password2) values( \'%s\',\'%s\')"
  "insert into statinfo(uid,reg_date,reg_ip) values( \'%s\',\'%s\' ,%d)"
  "insert into last_login(uid,last_login_time,last_login_ip) values( \'%s\',\'%s\',%d)"
  "insert into userinfo(uid) values( \'%s\')"
  "insert into money(uid) values( \'%s\')"
  "insert into point(uid) values( \'%s\')"
  "update secuinfo set user_type=user_type+power(2,2) ,service=service+power(2,3) where uid = \'%s\'" 
        "insert into op_log(uid,op_type,op_time,op_detail,op_ip) values( \'%s\',11,\'%s\','ÐÂÊÖ¿¨¼¤»î£º³É¹¦',%d)"
  "COMMIT TRANSACTION addnewcarduser",
       val->username ,
  val->password ,
        val->username ,
  val->password ,
  val->username ,
  ChangeTmFormat(val->currentdate,szTime) ,
  val->userip ,
  val->username ,
  ChangeTmFormat(val->currentdate,szTime) ,
  val->userip ,
        val->username ,
        val->username ,
  val->username ,
        val->username ,
  val->username ,
  ChangeTmFormat(val->currentdate,szTime) ,
  val->userip );


please tell me  how to get the return code .
--------------------------------------------------------

If you are not an intended recipient of this e-mail, please notify the sender, delete it and do not read, act upon, print, disclose, copy, retain or redistribute it. Click here for important additional terms relating to this e-mail.     http://www.ml.com/email_terms/
--------------------------------------------------------


More information about the FreeTDS mailing list