SQLBindParameter 绑定时间类型时出问题,在线等高手回
谁知道用ODBC时时间类型怎么转换,在Oracle数据库里面是date型(有时分秒),我用SQL_TYPE_TIMESTAMP 来绑定怎么会错呢?高手请回,在线等!
retcode = SQLBindParameter(hstmt1, 2, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP,
SQL_TYPE_TIMESTAMP, 0, 0, &dsRecTime, 0, &cbRecTime);
问题点数:20、回复次数:4Top
1 楼119365374(砖头)回复于 2006-11-03 16:24:13 得分 0
嗯....oracle里的时间实质上是float型,timestamp实质上是二进制数据,当然绑不上.试试绑float看.Top
2 楼oldliu(老刘)回复于 2006-11-06 10:44:52 得分 0
楼上的大哥,不行啊,还是出错
执行的时候返回-1
而且用SQLGetDiagRec()也得不到错误信息
同时还发现另一个问题
retcode =SQLBindParameter(hstmt1, 5, SQL_PARAM_INPUT, SQL_C_FLOAT,
SQL_REAL, 0, 0, &sValue, 0, &cbValue);
不指定精度,插入数据库的只有0.0,指定后后返回“大于列指定的精度”的错误
数据库里面是number[4,1]类型Top
3 楼oldliu(老刘)回复于 2006-11-06 10:46:19 得分 0
全程序如下:
void BindTest()
{
SQLSMALLINT sTimeWgt;
SQLSMALLINT sFreqWgt;
SQLFLOAT sValue;
TIMESTAMP_STRUCT dsRecTime ;
SQLCHAR szDeviceId[14];
char szState[200];
char szErrorMsg[1024];
long cbNativeError,pcbEMsg;
//SQLCHAR sz[30];
SQLINTEGER cbTimeWgt = 0, cbFreqWgt = 0, cbRecTime = 0, cbDeviceId = SQL_NTS,
cbValue = 0;
SQLRETURN retcode;
retcode = SQLPrepare(hstmt1, (unsigned char *)"INSERT INTO clrt_ns_102_2006(DEVICEID,RECTIME,FREQWGT,TIMEWGT,LVALUE) VALUES (?,?, ?, ?, ?)", SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_CHAR,
SQL_CHAR, 14, 0, &szDeviceId, 0, &cbDeviceId);
retcode = SQLBindParameter(hstmt1, 2, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP,
SQL_FLOAT, 0, 0, &dsRecTime, 0, &cbRecTime);
retcode = SQLBindParameter(hstmt1, 3, SQL_PARAM_INPUT, SQL_C_SSHORT,
SQL_INTEGER, 0, 0, &sFreqWgt, 0, &cbFreqWgt);
retcode = SQLBindParameter(hstmt1, 4, SQL_PARAM_INPUT, SQL_C_SSHORT,
SQL_INTEGER, 0, 0, &sTimeWgt, 0, &cbTimeWgt);
retcode =SQLBindParameter(hstmt1, 5, SQL_PARAM_INPUT, SQL_C_FLOAT,
SQL_REAL, 0, 0, &sValue, 0, &cbValue);
strcpy((char *)szDeviceId , "100004");
dsRecTime.year = 2006;
dsRecTime.month = 12;
dsRecTime.day = 20;
dsRecTime.hour = 10;
dsRecTime.minute = 10;
dsRecTime.second = 50;
sTimeWgt = 1;
sFreqWgt = 1;
sValue = 2.1;
retcode = SQLExecute(hstmt1);
char szState[200];
char szErrorMsg[1024];
long cbNativeError,pcbEMsg;
::SQLGetDiagRec(SQL_HANDLE_STMT,hstmt1,1,(unsigned char *)szState,&cbNativeError,(unsigned char *)szErrorMsg,1024,(short *)&pcbEMsg);
}Top
4 楼oldliu(老刘)回复于 2006-11-06 10:49:21 得分 0
create table CLRT_NS_102_2006
(
DEVICEID VARCHAR2(14),
RECTIME DATE,
FREQWGT NUMBER(1),
TIMEWGT NUMBER(1),
LVALUE NUMBER(4,1),
SPARE VARCHAR2(10)
)Top




