none
查询数据库抛出“数据已截断”异常 RRS feed

  • 问题

  • 数据库的HelpDB表的定义

    Heyword nchar(100)

    HelpDetails nchar(2000)

    我现在的问题是:可以插入,更新数据库。

    当要查询数据库中该字段的值时就抛出数据已截断的错误。

    CRecordset派生类的DoFieldExchange(CFieldExchange* pFX)定义如下:

    void CHelpDB::DoFieldExchange(CFieldExchange* pFX)
    {
     pFX->SetFieldType(CFieldExchange::outputColumn);
    // RFX_Text() 和 RFX_Int() 这类宏依赖的是
    // 成员变量的类型,而不是数据库字段的类型。
    // ODBC 尝试自动将列值转换为所请求的类型
     RFX_Text(pFX, _T("[HelpKeyword]"), m_HelpKeyword);
     RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails);
    }

    RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails);默认的第四个参数为255,当字符串个数大于255时就会抛出“数据截断”异常。

    但是我修改该函数为:RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails,2000);后还是抛出异常。

    2012年5月30日 1:30

答案

  • 数据截断,一般是数据的实际长度超过了你定义的长度,你的数据库是哪个版本的?
    • 已标记为答案 cug_heshun 2012年5月31日 0:57
    2012年5月30日 1:53
    版主
  • 如果我没弄错的话,这个问题通常发生在要写入的数据长度超过数据库字段所宣告的长度,您可以尝试缩短要写入的数据长度,或是加大数据库字段的长度。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已标记为答案 cug_heshun 2012年5月31日 0:57
    2012年5月30日 2:02
  • 从错误提示看,是程序端的异常,不是  服务端的异常,不是数据库的问题,你应该转到你和程序语言对应的版块去问

    • 已标记为答案 cug_heshun 2012年5月31日 0:58
    2012年5月30日 2:20

全部回复

  • 数据截断,一般是数据的实际长度超过了你定义的长度,你的数据库是哪个版本的?
    • 已标记为答案 cug_heshun 2012年5月31日 0:57
    2012年5月30日 1:53
    版主
  • 如果我没弄错的话,这个问题通常发生在要写入的数据长度超过数据库字段所宣告的长度,您可以尝试缩短要写入的数据长度,或是加大数据库字段的长度。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已标记为答案 cug_heshun 2012年5月31日 0:57
    2012年5月30日 2:02
  • 我的数据库是sql severs 2008.表里面的字段定义 数据类型是nchar(2000)。在DoFieldExchange(CFieldExchange* pFX)中已经修改RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails); 为:RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails,2000);后还是抛出异常。
    2012年5月30日 2:04
  • 数据截断,一般是数据的实际长度超过了你定义的长度,你的数据库是哪个版本的?

    我的数据库是sql severs 2008.表里面的字段定义 数据类型是nchar(2000)。在DoFieldExchange(CFieldExchange* pFX)中已经修改RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails); 为:RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails,2000);后还是抛出异常。
    2012年5月30日 2:04
  • 如果我没弄错的话,这个问题通常发生在要写入的数据长度超过数据库字段所宣告的长度,您可以尝试缩短要写入的数据长度,或是加大数据库字段的长度。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    我现在的问题是:可以向数据库中插入记录,也可以更新记录,但是要把数据库中的的HelpDetails的值读出来时,抛出“数据已截断异常”。我的想法是:CRecordset类的HelpDetails的长度不够,因为默认的是255  而我数据库中定义的是2000,但是我已经修改了RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails,2000);为什么还是长度不够呢?还是这样修改没有作用。如果没有作用那又应该怎么修改呢?


    • 已标记为答案 cug_heshun 2012年5月31日 0:58
    • 取消答案标记 cug_heshun 2012年5月31日 0:58
    2012年5月30日 2:11
  • 从错误提示看,是程序端的异常,不是  服务端的异常,不是数据库的问题,你应该转到你和程序语言对应的版块去问

    • 已标记为答案 cug_heshun 2012年5月31日 0:58
    2012年5月30日 2:20
  • 从错误提示看,是程序端的异常,不是  服务端的异常,不是数据库的问题,你应该转到你和程序语言对应的版块去问

    嗯,是的。数据库没问题。我在sql sever 2008的sql窗口中写是可以查询的。现在来求助,就是想知道怎么修改CRecordset类的派生类的DoFieldExchange(CFieldExchange* pFX)中的RFX_Text(pFX, _T("[HelpDetails]"), m_HelpDetails); 才能生效
    2012年5月30日 2:30
  • 真得不懂 高手请教https://www.136.la/tech/show-121043.html
    2020年8月2日 3:52