请问怎么读取SQLSERVER中的ntext?急~~

时间:2021-11-14 04:40:46
MSDN上的是这样
void GetFieldValue( short nIndex, CDBVariant& varValue, short nFieldType = DEFAULT_FIELD_TYPE );

我这样做老是报Invalid argument value

short nIndex = 0;
CDBVariant varPcont;

Rs.GetFieldValue(nIndex+1,varAcont,SQL_C_BINARY);
一执行到上一行就出错

新手,实在搞不定~~
求助~

11 个解决方案

#1


CDBVariant Contains Wrong BOOL Value When Calling CRecordset::GetFieldValue()
必须这样使用:
CDatabase db;
db.OpenEx(_T("Driver=SQL Server;Server=(local);Database=Pubs;UID=sa;PWD=;"));

CRecordset rs;
rs.m_pDatabase = &db;
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM authors"));

CDBVariant varField;
rs.GetFieldValue(_T("contract"),varField);
BOOL boolValue = varField.m_boolVal;
更多的可参考
PRB: CDBVariant Contains Wrong BOOL Value When Calling CRecordset::GetFieldValue() 

Q230491

#2


我的程序只运行到rs.GetFieldValue(_T("contract"),varField);这一步就报错了,
其他类型的都没有问题
出现问题的字段在SQLSERVER中是ntext类型,里面放的是RTF的编码

还请gracezhu(eutom) 多多指点

你给我的代码和我的只有
BOOL boolValue = varField.m_boolVal;
不明白这个boolValue有什么用处


#3


你仔细看看这篇KB
SYMPTOMS
When calling the CRecordset::GetFieldValue() method that accepts a CDBVariant object as a parameter and the target field in the database is a bit field, the BOOL value (m_boolVal) is incorrect. 



RESOLUTION
Use an explicit type other then SQL_C_BIT, such as SQL_C_UTINYINT or SQL_C_SLONG, as the type of variable to bind to.

rs.GetFieldValue(_T("contract"),varField,SQL_C_SLONG);
BOOL boolValue = varField.m_boolVal;

#4


http://community.csdn.net/Expert/topic/3101/3101974.xml?temp=6.313723E-02

#5


刚才上了MSDN Online查了一下,找了gracezhu(eutom)的那篇KB
又看了一下Pubs的author表中的contract的类型,它是bit,而我的问题是nText型,我表中还有其他的如nvarchar处理都是正常的,只有nText这个类型处理有问题,找了半天,也没搞定~~

还请高手多多帮忙~~

谢谢先

#6


UP

#7


高手都哪去啦?

#8


_variant_t value = m_pRecordset.GetCollect("字段名");

#9


可能你数据库有问题,建议仔细检查出错原因,提供一段查错的代码给你

try
{
_bstr_t rx;
rx=m_pSet->Fields->GetItem(fd)->Value;
lstrcpy(dest,rx);

return TRUE;
}
catch(_com_error&e)
{
TCHAR msg[300];
sprintf(msg,_T("Get Field %s Error:"),fd);
ShowMessage(msg);

char source[1024];

memset(source,0,1024);

sprintf(source,"get field错误:%s",fd);
ReportError(e,source);
ReportError(m_pDatabase->m_pConn,source);
              }

void ReportError(_ConnectionPtr pConnection,LPCTSTR Source)
{


ErrorPtr   pErr = NULL;

ShowLMsg(Format("Source:%s",Source));

    if( (pConnection->Errors->Count) > 0)
    {
        long nCount = pConnection->Errors->Count;
        // Collection ranges from 0 to nCount -1.
ShowLMsg(_T("Connection Error:"));
        for(long i = 0; i < nCount; i++)
        {
            pErr = pConnection->Errors->GetItem(i);
TCHAR ErrorMsg[100];
sprintf(ErrorMsg,_T("\t Error number: %x\t%s\0"), pErr->Number,
                pErr->Description);
ShowLMsg(ErrorMsg);
        }
    }


}

void ReportError(_com_error e,LPCTSTR source)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());

    // Print COM errors.
ShowLMsg(Format("source:%s\0",source));
TCHAR error[100];
ShowLMsg(_T("Error"));
sprintf(error,_T("\tCode = %08lx\n"), e.Error());
ShowLMsg(error);
sprintf(error,_T("\tCode meaning = %s\n"), e.ErrorMessage());
ShowLMsg(error);
sprintf(error,_T("\tSource = %s\n"), (LPCSTR) bstrSource);
ShowLMsg(error);
sprintf(error,_T("\tDescription = %s\n"), (LPCSTR) bstrDescription);
ShowLMsg(error);

}

#10


_variant_t value = m_pRecordset.GetCollect("字段名");

#11


没搞定:(

先结了吧

#1


CDBVariant Contains Wrong BOOL Value When Calling CRecordset::GetFieldValue()
必须这样使用:
CDatabase db;
db.OpenEx(_T("Driver=SQL Server;Server=(local);Database=Pubs;UID=sa;PWD=;"));

CRecordset rs;
rs.m_pDatabase = &db;
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM authors"));

CDBVariant varField;
rs.GetFieldValue(_T("contract"),varField);
BOOL boolValue = varField.m_boolVal;
更多的可参考
PRB: CDBVariant Contains Wrong BOOL Value When Calling CRecordset::GetFieldValue() 

Q230491

#2


我的程序只运行到rs.GetFieldValue(_T("contract"),varField);这一步就报错了,
其他类型的都没有问题
出现问题的字段在SQLSERVER中是ntext类型,里面放的是RTF的编码

还请gracezhu(eutom) 多多指点

你给我的代码和我的只有
BOOL boolValue = varField.m_boolVal;
不明白这个boolValue有什么用处


#3


你仔细看看这篇KB
SYMPTOMS
When calling the CRecordset::GetFieldValue() method that accepts a CDBVariant object as a parameter and the target field in the database is a bit field, the BOOL value (m_boolVal) is incorrect. 



RESOLUTION
Use an explicit type other then SQL_C_BIT, such as SQL_C_UTINYINT or SQL_C_SLONG, as the type of variable to bind to.

rs.GetFieldValue(_T("contract"),varField,SQL_C_SLONG);
BOOL boolValue = varField.m_boolVal;

#4


http://community.csdn.net/Expert/topic/3101/3101974.xml?temp=6.313723E-02

#5


刚才上了MSDN Online查了一下,找了gracezhu(eutom)的那篇KB
又看了一下Pubs的author表中的contract的类型,它是bit,而我的问题是nText型,我表中还有其他的如nvarchar处理都是正常的,只有nText这个类型处理有问题,找了半天,也没搞定~~

还请高手多多帮忙~~

谢谢先

#6


UP

#7


高手都哪去啦?

#8


_variant_t value = m_pRecordset.GetCollect("字段名");

#9


可能你数据库有问题,建议仔细检查出错原因,提供一段查错的代码给你

try
{
_bstr_t rx;
rx=m_pSet->Fields->GetItem(fd)->Value;
lstrcpy(dest,rx);

return TRUE;
}
catch(_com_error&e)
{
TCHAR msg[300];
sprintf(msg,_T("Get Field %s Error:"),fd);
ShowMessage(msg);

char source[1024];

memset(source,0,1024);

sprintf(source,"get field错误:%s",fd);
ReportError(e,source);
ReportError(m_pDatabase->m_pConn,source);
              }

void ReportError(_ConnectionPtr pConnection,LPCTSTR Source)
{


ErrorPtr   pErr = NULL;

ShowLMsg(Format("Source:%s",Source));

    if( (pConnection->Errors->Count) > 0)
    {
        long nCount = pConnection->Errors->Count;
        // Collection ranges from 0 to nCount -1.
ShowLMsg(_T("Connection Error:"));
        for(long i = 0; i < nCount; i++)
        {
            pErr = pConnection->Errors->GetItem(i);
TCHAR ErrorMsg[100];
sprintf(ErrorMsg,_T("\t Error number: %x\t%s\0"), pErr->Number,
                pErr->Description);
ShowLMsg(ErrorMsg);
        }
    }


}

void ReportError(_com_error e,LPCTSTR source)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());

    // Print COM errors.
ShowLMsg(Format("source:%s\0",source));
TCHAR error[100];
ShowLMsg(_T("Error"));
sprintf(error,_T("\tCode = %08lx\n"), e.Error());
ShowLMsg(error);
sprintf(error,_T("\tCode meaning = %s\n"), e.ErrorMessage());
ShowLMsg(error);
sprintf(error,_T("\tSource = %s\n"), (LPCSTR) bstrSource);
ShowLMsg(error);
sprintf(error,_T("\tDescription = %s\n"), (LPCSTR) bstrDescription);
ShowLMsg(error);

}

#10


_variant_t value = m_pRecordset.GetCollect("字段名");

#11


没搞定:(

先结了吧