我收到一CString类型的值(例子值:“ECA382975611503009123456780D8613000000000”)通过代码解析后插入到数据库中。数据库的表名为info2,字段类型分别为:
C_num, Center, Dir,Now, State, Effect 为nvarchar类型
Today 为datatime类型
La, Lo, v, Angle 为float类型
我插入数据库中的时候总是出现错误,对话框提示为“将截断字符串或二进制数据”请大家帮我调试错误并告知原因。
/*以下为程序代码*/
CString info = m_dataInfo;//该处为用一临时变量获得该CString类型的值
//以下为获得系统时间的值
int m_nHour ,m_nMinute ,m_nSecond ,m_nYear ,m_nMonth ,m_nDay;
CString m_state ,m_effect ,m_today ,m_now ,m_Cnum,m_Dir;
CString m_Lo ,m_La ,m_v ,m_Angle,m_Centernum;
SYSTEMTIME sysTm;
::GetLocalTime(&sysTm);
m_nYear = sysTm.wYear;
m_nMonth = sysTm.wMonth;
m_nDay = sysTm.wDay;
m_nHour = sysTm.wHour;
m_nMinute = sysTm.wMinute;
m_nSecond = sysTm.wSecond;
CString a,b,c,d,e,f;
a.Format(_T("%i"),m_nYear);
b.Format(_T("%i"),m_nMonth);
c.Format(_T("%i"),m_nDay);
m_today = a + "-" + b + "-" + c; //**日期
d.Format(_T("%i"),m_nHour);
e.Format(_T("%i"),m_nMinute);
f.Format(_T("%i"),m_nSecond);
m_now = d + "时" + e + "分" + f + "秒"; //**时间
if(info.Mid(0,2) == "EC")
{
m_state = "EC"; }
else
m_state = "11"; CString aa = info.Mid(3,2);
CString bb = info.Mid(5,2);
CString cc = info.Mid(7,3);
float longi = float(atoi(aa) + atoi(bb)/60.0 + atoi(cc)/3600.0);
m_La.Format(_T("%10.6f"),longi); CString dd = info.Mid(10,3);
CString ee = info.Mid(13,2);
CString ff = info.Mid(15,3);
float lati = float(atoi(dd) + atoi(ee)/60.0 + atoi(ff)/3600.0);
m_Lo.Format(_T("%10.6f"),lati); CString m_v1 = info.Mid(18,3);
CString m_v2 = info.Mid(21,1);
float gg = float(atoi(m_v1) + atoi(m_v2) / 10.0);
m_v.Format(_T("%10.1f"),gg); CString m_Angle1 = info.Mid(22,3);
CString m_Angle2 = info.Mid(25,1);
float hh = float(atoi(m_Angle1) + atoi(m_Angle2) / 10.0);
m_Angle.Format(_T("%10.1f"),hh);
if( hh >= 0 && hh <= 22.5)
{
m_Direction = "zbfx";
}
else
m_Direction = "xbfx"; m_Cnum = info.Mid(30,11);
m_Centernum = "";
_variant_t strQuery; strQuery = "insert into info2 (C_num, Today, Now, State, Effect, La, Lo, v, Angle, Center, Dir) values ('"+m_Cnum+"', '"+m_today+"', '"+m_now+"', '"+m_state+"', '"+m_effect+"', '"+m_La+"', '"+m_Lo+"', '"+m_v+"', '"+m_Angle+"', '"+m_Centernum+"', '"+m_Dir+"')"; theApp.ADOExecute(theApp.m_pADOSet,strQuery);
}
C_num, Center, Dir,Now, State, Effect 为nvarchar类型
Today 为datatime类型
La, Lo, v, Angle 为float类型
我插入数据库中的时候总是出现错误,对话框提示为“将截断字符串或二进制数据”请大家帮我调试错误并告知原因。
/*以下为程序代码*/
CString info = m_dataInfo;//该处为用一临时变量获得该CString类型的值
//以下为获得系统时间的值
int m_nHour ,m_nMinute ,m_nSecond ,m_nYear ,m_nMonth ,m_nDay;
CString m_state ,m_effect ,m_today ,m_now ,m_Cnum,m_Dir;
CString m_Lo ,m_La ,m_v ,m_Angle,m_Centernum;
SYSTEMTIME sysTm;
::GetLocalTime(&sysTm);
m_nYear = sysTm.wYear;
m_nMonth = sysTm.wMonth;
m_nDay = sysTm.wDay;
m_nHour = sysTm.wHour;
m_nMinute = sysTm.wMinute;
m_nSecond = sysTm.wSecond;
CString a,b,c,d,e,f;
a.Format(_T("%i"),m_nYear);
b.Format(_T("%i"),m_nMonth);
c.Format(_T("%i"),m_nDay);
m_today = a + "-" + b + "-" + c; //**日期
d.Format(_T("%i"),m_nHour);
e.Format(_T("%i"),m_nMinute);
f.Format(_T("%i"),m_nSecond);
m_now = d + "时" + e + "分" + f + "秒"; //**时间
if(info.Mid(0,2) == "EC")
{
m_state = "EC"; }
else
m_state = "11"; CString aa = info.Mid(3,2);
CString bb = info.Mid(5,2);
CString cc = info.Mid(7,3);
float longi = float(atoi(aa) + atoi(bb)/60.0 + atoi(cc)/3600.0);
m_La.Format(_T("%10.6f"),longi); CString dd = info.Mid(10,3);
CString ee = info.Mid(13,2);
CString ff = info.Mid(15,3);
float lati = float(atoi(dd) + atoi(ee)/60.0 + atoi(ff)/3600.0);
m_Lo.Format(_T("%10.6f"),lati); CString m_v1 = info.Mid(18,3);
CString m_v2 = info.Mid(21,1);
float gg = float(atoi(m_v1) + atoi(m_v2) / 10.0);
m_v.Format(_T("%10.1f"),gg); CString m_Angle1 = info.Mid(22,3);
CString m_Angle2 = info.Mid(25,1);
float hh = float(atoi(m_Angle1) + atoi(m_Angle2) / 10.0);
m_Angle.Format(_T("%10.1f"),hh);
if( hh >= 0 && hh <= 22.5)
{
m_Direction = "zbfx";
}
else
m_Direction = "xbfx"; m_Cnum = info.Mid(30,11);
m_Centernum = "";
_variant_t strQuery; strQuery = "insert into info2 (C_num, Today, Now, State, Effect, La, Lo, v, Angle, Center, Dir) values ('"+m_Cnum+"', '"+m_today+"', '"+m_now+"', '"+m_state+"', '"+m_effect+"', '"+m_La+"', '"+m_Lo+"', '"+m_v+"', '"+m_Angle+"', '"+m_Centernum+"', '"+m_Dir+"')"; theApp.ADOExecute(theApp.m_pADOSet,strQuery);
}
CString info = m_dataInfo;//该处为用一临时变量获得该CString类型的值
//以下为获得系统时间的值
int m_nHour ,m_nMinute ,m_nSecond ,m_nYear ,m_nMonth ,m_nDay;
CString m_state ,m_effect ,m_today ,m_now ,m_Cnum,m_Dir;
CString m_Lo ,m_La ,m_v ,m_Angle,m_Centernum;
SYSTEMTIME sysTm;
::GetLocalTime(&sysTm);
m_nYear = sysTm.wYear;
m_nMonth = sysTm.wMonth;
m_nDay = sysTm.wDay;
m_nHour = sysTm.wHour;
m_nMinute = sysTm.wMinute;
m_nSecond = sysTm.wSecond;
CString a,b,c,d,e,f;
a.Format(_T("%i"),m_nYear);
b.Format(_T("%i"),m_nMonth);
c.Format(_T("%i"),m_nDay);
m_today = a + "-" + b + "-" + c; //**日期
d.Format(_T("%i"),m_nHour);
e.Format(_T("%i"),m_nMinute);
f.Format(_T("%i"),m_nSecond);
m_now = d + "时" + e + "分" + f + "秒"; //**时间if(info.Mid(0,2) == "EC")
{
m_state = "EC";
}
else
m_state = "11";CString aa = info.Mid(3,2);
CString bb = info.Mid(5,2);
CString cc = info.Mid(7,3);
float longi = float(atoi(aa) + atoi(bb)/60.0 + atoi(cc)/3600.0);
m_La.Format(_T("%10.6f"),longi);CString dd = info.Mid(10,3);
CString ee = info.Mid(13,2);
CString ff = info.Mid(15,3);
float lati = float(atoi(dd) + atoi(ee)/60.0 + atoi(ff)/3600.0);
m_Lo.Format(_T("%10.6f"),lati);CString m_v1 = info.Mid(18,3);
CString m_v2 = info.Mid(21,1);
float gg = float(atoi(m_v1) + atoi(m_v2) / 10.0);
m_v.Format(_T("%10.1f"),gg);CString m_Angle1 = info.Mid(22,3);
CString m_Angle2 = info.Mid(25,1);
float hh = float(atoi(m_Angle1) + atoi(m_Angle2) / 10.0);
m_Angle.Format(_T("%10.1f"),hh);
if( hh >= 0 && hh <= 22.5)
{
m_Direction = "zbfx";
}
else
m_Direction = "xbfx";m_Cnum = info.Mid(30,11);
m_Centernum = "";
_variant_t strQuery;strQuery = "insert into info2 (C_num, Today, Now, State, Effect, La, Lo, v, Angle, Center, Dir) values ('"+m_Cnum+"', '"+m_today+"', '"+m_now+"', '"+m_state+"', '"+m_effect+"', '"+m_La+"', '"+m_Lo+"', '"+m_v+"', '"+m_Angle+"', '"+m_Centernum+"', '"+m_Dir+"')";theApp.ADOExecute(theApp.m_pADOSet,strQuery);
CString aa = info.Mid(3,2);这句话没错啊,是指aa取字符串info中从第四个字节开始取两个字节做为aa的值。
比如
CString info ="123456789";
CString aa = info.Mid(3,2);
那么
aa = "45";
所以当你取到汉字时,可能取了一半。
这就会出现上面的错误。Do you understand what I've said?
本人愚笨请说详细点好吗,谢谢
只有一种可能内容比字段长度长需要截断内容老兄你为什么总是用这种笨格式很难看很难维护
strQuery = "insert into info2 (C_num, Today, Now, State, Effect, La, Lo, v, Angle, Center, Dir) values ('"+m_Cnum+"', '"+m_today+"', '"+m_now+"', '"+m_state+"', '"+m_effect+"', '"+m_La+"', '"+m_Lo+"', '"+m_v+"', '"+m_Angle+"', '"+m_Centernum+"', '"+m_Dir+"')";
用这种吧
strQuery.format( "insert info t2 (a,b,c,d,e,f) vaules
('%s','%s','%s',%f,%f)",cA,cB,cC,cD,fE,fF);
CString or _variant_t ?
windcao:
Format不是_variant_t 的成员
如果用CString strQuery;
那么你这句话strQuery.format( "insert info t2 (a,b,c,d,e,f) vaules
('%s','%s','%s',%f,%f)",cA,cB,cC,cD,fE,fF);
参数又不对
insert into info2 (C_num, Today, Now, State, Effect, La, Lo, v, Angle, Center, Dir) values ('13000000000', '2003-12-25', '14时41分44秒', 'EC', '', ' 38.693333', '115.052500', ' 123.4', ' 567.8', '', '')
我用的是 CString strSql
varSql
可以 strSql.Format (...);
varSql.SetString (strSql.GetBuffer(0));
我感觉好些,你爱怎么用就怎么用吧
参数怎么错了?
这应该是数据库内部的错误