用c写mysql接口函数

liangchen512200359 2008-12-08 03:34:43
我用c写了一个很简单的mysql接口函数, 但是别人说直接在c中写sql语句不是很规范,应该写成存储过程,所以请教各位高手,如何用存储过程来改写这个程序,小弟新学mysql,承蒙各位不吝赐教啦~,接口函数如下
#include <windows.h>
#include <stdio.h>
#include <mysql.h>


char* demand_log_date(char * id,char* start_time,char* expiry_time,char* buff)
{

char* buffpre=buff;
int i;
char szSqlText[500]="";
MYSQL mysql;
MYSQL_RES * res ;
MYSQL_ROW row ;


mysql_init(&mysql);
if(mysql_real_connect(&mysql,"localhost", //连接数据库
"root", "123123", "lian", MYSQL_PORT, NULL, 0 ) )
{
sprintf(szSqlText,"select time,operation from tboperate_log where userid=" );
strcat(szSqlText,id);
strcat(szSqlText," and time>'");
strcat(szSqlText,start_time);
strcat(szSqlText,"' and time <'");
strcat(szSqlText,expiry_time);
strcat(szSqlText,"'");


if (mysql_query( &mysql, szSqlText)) //执行SQL语句
{ //执行SQL语句出错
printf("demand error!") ;
mysql_close( &mysql ) ;
return FALSE ;
}

res=mysql_store_result(&mysql);
int numRecords=mysql_num_rows(res);
if(numRecords==0)
{
printf("numRecords 为 0\n");
mysql_free_result( res ) ;
return FALSE;
}
for(i=0;i <numRecords;i++,buffpre++)
{
row=mysql_fetch_row(res);
strcpy(buffpre,row[0]);
buffpre+=19;
strcpy(buffpre,row[1]);
buffpre+=8;
//buffpre='\0';
}
buffpre='\0';
mysql_free_result( res ) ;
}
else
{ //连接数据库出错
printf( "Can't connect to the mysql server ") ;
//printf("\n,%s",mysql_error(&mysql));
mysql_close( &mysql ) ;
return FALSE ;
}
mysql_close( &mysql ) ;
return buff;
}

int main()
{
int i;
char* m=(char*)malloc(sizeof(char)*500);
memset(m,0,500);
char* mpre=m;
char* n;

n=demand_log_date("45421","2000/01/01 00:00:00","2010/12/31 00:00:00",mpre);
if(n==FALSE)
{
printf("函数未成功运行");
return 0;
}
for(;(*mpre)!='\0';mpre++)
{
printf("%s",mpre);
mpre+=27;
printf("\n");
}

free(m);
m=NULL;
mpre=NULL;
return 1;
}
...全文
233 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangchen512200359 2008-12-10
  • 打赏
  • 举报
回复
小生把程序改了下,写成了存储过程p2(),在MySQL里可以调用,可是写成接口就老显示执行SQL语句出错,各位给看看吧
#include<windows.h>
#include<stdio.h>
#include<mysql.h>


char * demand_password(char* id) //返回值为password
{
char* password=NULL;

char szSqlText[500]="";
MYSQL mysql;
MYSQL_RES * res;
MYSQL_ROW row ;


mysql_init(&mysql);
if(mysql_real_connect(&mysql,"localhost", //连接数据库
"root", "123123", "lian", MYSQL_PORT, NULL,CLIENT_MULTI_STATEMENTS) )
{


/*sprintf(szSqlText,"call demand_password('");
strcat(szSqlText,id);
strcat(szSqlText,"');");
*/
sprintf(szSqlText,"call p2()");

if (mysql_query( &mysql, szSqlText)) //执行SQL语句
{ //执行SQL语句出错
printf("Can't find the id you want") ;
printf("\n,%s",mysql_error(&mysql));
mysql_close( &mysql ) ;
return FALSE ;
}


res = mysql_store_result( &mysql ) ; //取得查询结果
int numRecords=mysql_num_rows(res);
if(numRecords==0)
{
printf("numRecords 为 0\n");
mysql_free_result( res ) ;
return FALSE;
}

row=mysql_fetch_row(res);
password=row[0];
mysql_free_result( res ) ;

/*res = mysql_store_result( &mysql ) ; //取得查询结果
row=mysql_fetch_row(res);
password=row[0];


mysql_free_result( res ) ; */

}
else
{ //连接数据库出错
printf( "Can't connect to the mysql server ") ;
//printf("\n,%s",mysql_error(&mysql));
mysql_close( &mysql ) ;
return FALSE ;
}
mysql_close( &mysql ) ;
return password;
}

int main()
{
char* s=(char *)malloc(sizeof(char)*10);
char* spre=s;
spre=demand_password("2510");
if(spre==FALSE)
{
printf("\nspre为FALSE");
return 0;
}
printf("%s",spre);
free(s);
s=NULL;
spre=NULL;
return 1;
}
liangchen512200359 2008-12-10
  • 打赏
  • 举报
回复
不是吧,没人给点有参考的建议么
liangchen512200359 2008-12-10
  • 打赏
  • 举报
回复
顶下
liangchen512200359 2008-12-09
  • 打赏
  • 举报
回复
不好意思哈,我看这里人气旺,就发个帖子问下,希望大家不要介意
hyde100 2008-12-09
  • 打赏
  • 举报
回复
c、mysql 都不是 mssql 的东西
liangchen512200359 2008-12-09
  • 打赏
  • 举报
回复
up~
luoxiongbo 2008-12-09
  • 打赏
  • 举报
回复
看的头都晕了,不懂,UP~~

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧