PSQLODBC会封装的,他是这样封装的:
二进制的图象文件按字节读出,转换成字符串
转换规则如下:
1. ASCII 为(0-31,39,92,127-255)(十进值) 转换为三位的八进制,前面加上\\, 比如ASCII 39 转换为 \\047.
2. 其余的ASCII不用转换
3. 将这些字符串连接起来,前后加上引号,强制转换为BETAE, 
 如 图象文件 4个字节 0A'B
    转换的结果为 '\\000A\\047B'::BYTEA

解决方案 »

  1.   

    现在有如下代码:
    在导文本文件时没有问题,导图象时候就出错,估计可能是文件中字符的问题
    unsigned char *cdata = 0;
    int size;
    FILE *fp = 0;struct stat buf;
    int result;result = stat("c:/test.JPG", &buf);if(result != 0)
    return false;size = buf.st_size;cdata = new unsigned char[size];fp = fopen("c:/test.JPG", "rb");fread(cdata, sizeof(unsigned char), size, fp);
    size_t newLen = 0;unsigned char* newbuf = PQescapeBytea(cdata, size, &newLen);const char *paramValues[1];paramValues[0] = (char*)newbuf;
    // paramValues[0] = "joe's place"; //用字符串没有问题m_Pres = PQexecParams(m_Pconn ,
    "insert into lraster values(1999,$1)",
    1, /* 一个参数 */
    NULL, /* 让后端推导参数类型 */
    paramValues,
    NULL, /* 因为是文本,所以不需要参数长度 */
    NULL, /* 缺省是参数都是文本 */
    1); /* 要求获取二进制结果 */
      

  2.   

    把insert into lraster values(1999,$1)
    改为insert into lraster values(1999,$1::BYTEA)试一下