db_function.c
上传用户:bilang918
上传日期:2010-03-24
资源大小:558k
文件大小:4k
- /* DB_libry 封装函数,连结 sybase */
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /************************************************
- * Description : Initialize DB-Library
- * Function : db_init()
- * Input :
- * Ouput : int 由返回值判断初试化状态
- ************************************************/
- int DB_init(void)
- {
- /* Initialize DB-Library. */
- if (dbinit() == FAIL) return(-1);
- //dbsetversion(DBVERSION_100);
- return(1);
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**************************************************
- * Description: Connect database server
- * Function : db_connect()
- * Input : char * Dbname 数据库名称
- * char * YsrName 用户名
- * char * UsrPwd 密码
- * Ouput : DBPROCESS * dbproc 获得的process
- ***************************************************/
- DBPROCESS* DB_connect (char *DbName,char *UsrName,char *UsrPwd)
- {
- DBPROCESS *dbproc;
- LOGINREC *login;
-
- login = dblogin();
-
- DBSETLUSER(login, UsrName);
- DBSETLPWD(login, UsrPwd);
-
- //BCP_SETL(login, TRUE) ; //?????
- dbproc = dbopen(login, NULL);
-
- dbloginfree(login); //一定要释放dbloginfree
-
- if(dbproc!=NULL) dbuse(dbproc, DbName);
- else return(NULL);
-
- return(dbproc);
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /******************************************************
- * Description: Disconnect Database Server
- * Function : DB_disconnect()
- * Input :
- * Output :
- *******************************************************/
- void DB_disconnect(DBPROCESS* dbproc)
- {
- dbclose(dbproc);
- dbexit();
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**********************************************************************
- * Description : Send some Sql to the server with dbsqlexec
- * Function : DB_sqlexec()
- * Input : DBPROCESS * dbporc
- * int Sql_type Sql语句的类型 1 为select 0为其他
- * char * SqlStr Sql语句
- * int units 预计取得的一条记录的单元个数(不超过20)
- * int records 预计取得的记录数
- * void * temp_space 存储空间的地址
- * int record_len 单元的最大长度(不超过2048)
- * Output : int
- ***********************************************************************/
- int DB_sqlexec(DBPROCESS* dbproc,char * SqlStr,int Sql_type,int units,int records,int record_len,void* temp_space)
- {
- //DBPROCESS *dbproc; /* Our connection with SQL Server. */
- RETCODE result_code;
- DBCHAR text[20][2048];
-
- int i;
- int j;
-
- /* 判断 process 是否为空 */
- if (dbproc ==(DBPROCESS*)NULL)
- {
- printf("DBPROCESS NULL SqlStr:%sn",SqlStr);
- return(-1);
- }
-
- /* 执行Sql语句 */
- dbcmd(dbproc,SqlStr);
- dbsqlexec(dbproc);
-
- /* 判断返回值,是否成功 */
- result_code = dbresults(dbproc);
-
- i = 0;
- j = 0;
-
- if(result_code == SUCCEED)
- {
- if(Sql_type == 1)
- /* select 型SQL语句 */
- {
-
- /* BIND 足够多的单元数 */
- while( j < units )
- {
- dbbind(dbproc, j+1, NTBSTRINGBIND, (DBINT)0,text[j]);
-
- j++;
- printf("bind %dn",j);
- }
-
- /* 从PROCESS上取得数据 */
- while (dbnextrow(dbproc) != NO_MORE_ROWS)
- {
- j = 0;
- if ( i < records )//判断所取数据有否超过预留存储空间
- {
- while(j < units)
- {
- /* copy至对应存储空间 */
- memcpy(temp_space+i*units*record_len+j*record_len,text[j],record_len);
- j++;
- }
- }
- i++;
- }
-
-
-
- }
- /*INSERT,UPDATE型SQL语句*/
- else
- {
-
- return(0);
- }
-
- return(i);
- }
-
- else
- {
- printf("sql error sql:%sn",SqlStr);
- return(-1);
- }
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /**************************************************************************
- *Description : Get record
- *Function : Get_record()
- *Intput : void * start_data
- * char * record
- * int num 第几条记录,从0开始记数
- * int r_len 记录的长度(=在DB_sqlexec()中的 record_len)
- *Output : int 0为成功,-1为失败
- ***************************************************************************/
- int Get_record(void *start_data,char * record,int num,int r_len)
- {
- memcpy(record,start_data+num*r_len,r_len);
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////