C++调用MySQL(版本:5.051a)的API访问数据库,我设定的字段为LongBLOB,理论上支持4G存储空间,但我在调用mysql_stmt_bind_param(stmt, bind)和mysql_stmt_execute(stmt)的时候发生LIBMYSQL.DLL崩溃的错误,0xC0000005:Access Violation。询问正确写LongBLOG字段的代码。我有问题的代码:这个代码只能插入长度小于13K字节的数据到数据库,超出会导致LIBMYSQL.DLL崩溃//char *LESSTHEN16M                          //变量的值从文件中读取,作为参数传入,类型是Char *stmt = mysql_stmt_init(DBhandle); bind[1].buffer_type= MYSQL_TYPE_BLOB; 
bind[1].buffer= (char *)&LESSTHEN16M;      
bind[1].buffer_length = LESSTHEN16MLenth;  //它的长度也一并作为参数传入 
bind[1].is_null= &is_null; 
bind[1].length= &LESSTHEN16MLenth; mysql_stmt_prepare(stmt, InsertECGData, strlen(InsertECGData)) 
mysql_stmt_bind_param(stmt, bind) //前面都正常 
mysql_stmt_execute(stmt) //但执行到这一句,DLL就崩溃 修改后的代码:可以插入长度小于1M的数据,但大于1M会导致
char LESSTHEN16M[1024000];    // 我修改了类型定义,变为字符型数组,当大小为1M以下,可以正常插入,而大于1M时,会导致NTDLL.DLL错误:Unhandled exception in trymysql.exe(NTDLL.DLL):0xc00000FD:Stack Overflowstmt = mysql_stmt_init(DBhandle);   //程序在执行到这一句发生错误,NTDLL.DLL溢出程序崩溃bind[1].buffer_type= MYSQL_TYPE_BLOB; //下面的没有变化
bind[1].buffer= (char *)&LESSTHEN16M;      
bind[1].buffer_length = LESSTHEN16MLenth;  
bind[1].is_null= &is_null; 
bind[1].length= &LESSTHEN16MLenth; mysql_stmt_prepare(stmt, InsertECGData, strlen(InsertECGData)) 
mysql_stmt_bind_param(stmt, bind) 
mysql_stmt_execute(stmt) 

解决方案 »

  1.   

    哪位高手能帮我搞定BLOB字段的插入问题,在南京的我请他吃饭,在外地的我给他汇款(100块,只限第一个帮我搞定的兄弟)。
    条件:直接调用LIBMYSQL.DLL,我不想用ODBC,ADO...;至少应该可以插入100M以上的数据。
    绝对诚信,说到做到,不守信用可以BS我,羞辱我,人肉我。
    周同学13913853272.
      

  2.   

    兄弟,不能这么用。
    唯一有效的动态方式是使用API:
    mysql_stmt_send_long_data
      

  3.   

    my.ini
    max_allowed_packet = 16M
      

  4.   

    把max_allowed_packet 设置的大点
      

  5.   

    iihero兄说得对,你分开发就行了,yu7791兄说的也可以的不过我认为还是分开发的好
      

  6.   

    在my.ini 文件的[mysqld]中添加这一项
       max_allowed_packet = 16M