📄 dlodbc.cpp
字号:
SQLSMALLINT len;
SQLGetDiagRec(SQL_HANDLE_STMT, statement, 1, sql, &err, mes, 255, &len);
}
} catch (...) {
}
return -1;
}
SQLSMALLINT GetColumnCount(SQLHSTMT statement) {
SQLRETURN re;
SQLSMALLINT cols;
try {
re = SQLNumResultCols(statement,&cols);
if (re == SQL_SUCCESS || re == SQL_SUCCESS_WITH_INFO) {
return cols;
} else {
SQLCHAR sql[255];
SQLINTEGER err;
SQLCHAR mes[255];
memset (mes, '\0', 10);
memset (sql, '\0', 10);
SQLSMALLINT len;
SQLGetDiagRec(SQL_HANDLE_STMT, statement, 1, sql, &err, mes, 255, &len);
}
} catch (...) {
}
return -1;
}
int NextCursor(SQLHSTMT statement) {
SQLRETURN re;
try {
re = SQLFetchScroll(statement,(SQLSMALLINT)SQL_FETCH_NEXT,0);
if (re == SQL_SUCCESS || re == SQL_SUCCESS_WITH_INFO){
return 1;
}
} catch (...) {
}
return -1;
}
SQLCHAR* getData(SQLHSTMT statement, int index, long &s_len) {
try {
SQLRETURN re;
SQLSMALLINT type = SQL_C_CHAR;
SQLINTEGER buf_len=0;
SQLINTEGER str_len=0;
SQLDOUBLE buf = .0;
//SQLPOINTER pbuf = NULL;
SQL_DATE_STRUCT* pbuf = NULL;
SQL_TIME_STRUCT* pbuf2 = NULL;
SQL_TIMESTAMP_STRUCT* pbuf3 = NULL;
SQLINTEGER pbuf4 = 0;
SQLCHAR pbuf5 = 0;
SQLCHAR* p=NULL;
SQLINTEGER result = 0;
re = SQLColAttribute(statement,index,2,NULL,0,NULL,(void*)(&result));
switch (result) {
case -7:
re = SQLGetData(statement, (SQLUSMALLINT)index, SQL_C_BIT, (void*)(&pbuf5), 0, &str_len);
p = new SQLCHAR[1];
if (str_len==SQL_NULL_DATA) {
p[0] = '*';
} else {
if (pbuf5) {
p[0] = '1';
} else {
p[0] = '0';
}
}
s_len = 1;
break;
case -6:
case 4:
case 5:
re = SQLGetData(statement,(SQLUSMALLINT)index,SQL_C_SLONG,(void*)(&pbuf4),0,&str_len);
if (str_len==SQL_NULL_DATA) {
p = new SQLCHAR[1];
p[0] = '*';
s_len = 1;
} else {
p = new SQLCHAR[10];
memset((char*)p, '\0', 10);
itoa ((int)pbuf4, (char*)p, 10 );
s_len = strlen((char*)p);
}
break;
case 6:
case 8:
case 7:
re = SQLGetData(statement,(SQLUSMALLINT)index,SQL_C_DOUBLE,(void*)(&buf),0,&str_len);
if (str_len == SQL_NULL_DATA) {
p = new SQLCHAR[1];
p[0] = '*';
s_len = 1;
} else {
p = new SQLCHAR[str_len];
memset(p,'\0',str_len);
sprintf((char*)p, "%g", buf);
s_len = strlen((char*)p);
}
break;
case 91:
pbuf = new SQL_DATE_STRUCT;
buf_len = sizeof (SQL_DATE_STRUCT);
re = SQLGetData(statement, (SQLUSMALLINT)index, SQL_C_TYPE_DATE, (void*)pbuf, buf_len, &str_len);
if (str_len==SQL_NULL_DATA) {
p = new SQLCHAR[1];
p[0] = '*';
s_len = 1;
} else {
char year_char[10];
char month_char[10];
char day_char[10];
memset(year_char, '\0', 10);
memset(month_char, '\0', 10);
memset(day_char, '\0', 10);
itoa( (int)pbuf->year, year_char, 10 );
itoa( (int)pbuf->month, month_char, 10 );
itoa( (int)pbuf->day, day_char, 10 );
int len_year = strlen(year_char);
int len_month = strlen(month_char);
int len_day = strlen(day_char);
p = new SQLCHAR[len_year+len_month+len_day+2];
int k;
for (k=0; k<len_year; k++) p[k] = year_char[k];
p[len_year] = ',';
for (k=len_year+1; k<len_year+1+len_month; k++) p[k] = month_char[k-len_year-1];
p[len_year+1+len_month] = ',';
for (k=len_year+1+len_month+1; k<len_year+1+len_month+1+len_day; k++) p[k] = day_char[k-len_year-1-len_month-1];
s_len = len_year+len_month+len_day+2;
}
delete pbuf;
break;
case 92:
pbuf2 = new SQL_TIME_STRUCT;
buf_len = sizeof (SQL_TIME_STRUCT);
re = SQLGetData(statement, (SQLUSMALLINT)index, SQL_C_TYPE_TIME, (void*)pbuf2, buf_len, &str_len);
if (str_len==SQL_NULL_DATA) {
p = new SQLCHAR[1];
p[0] = '*';
s_len = 1;
} else {
char hour_char[10];
char minute_char[10];
char second_char[10];
memset(hour_char, '\0', 10);
memset(minute_char, '\0', 10);
memset(second_char, '\0', 10);
itoa( (int)pbuf2->hour, hour_char, 10 );
itoa( (int)pbuf2->minute, minute_char, 10 );
itoa( (int)pbuf2->second, second_char, 10 );
int len_hour= strlen(hour_char);
int len_minute = strlen(minute_char);
int len_second = strlen(second_char);
p = new SQLCHAR[len_hour+len_minute+len_second+2];
int k;
for (k=0; k<len_hour; k++) p[k] = hour_char[k];
p[len_hour] = ',';
for (k=len_hour+1; k<len_hour+1+len_minute; k++) p[k] = minute_char[k-len_hour-1];
p[len_hour+1+len_minute] = ',';
for (k=len_hour+1+len_minute+1; k<len_hour+1+len_minute+1+len_second; k++) p[k] = second_char[k-len_hour-1-len_minute-1];
s_len = len_hour+len_minute+len_second+2;
}
delete pbuf2;
break;
case 93:
pbuf3 = new SQL_TIMESTAMP_STRUCT;
buf_len = sizeof (SQL_TIMESTAMP_STRUCT);
re = SQLGetData(statement, (SQLUSMALLINT)index, SQL_C_TYPE_TIMESTAMP, (void*)pbuf3, buf_len, &str_len);
if (str_len==SQL_NULL_DATA) {
p = new SQLCHAR[1];
p[0] = '*';
s_len = 1;
} else {
char year_char[10];
char month_char[10];
char day_char[10];
memset(year_char, '\0', 10);
memset(month_char, '\0', 10);
memset(day_char, '\0', 10);
itoa( (int)pbuf3->year, year_char, 10 );
itoa( (int)pbuf3->month, month_char, 10 );
itoa( (int)pbuf3->day, day_char, 10 );
char hour_char[10];
char minute_char[10];
char second_char[10];
char fraction_char[10];
memset(hour_char, '\0', 10);
memset(minute_char, '\0', 10);
memset(second_char, '\0', 10);
memset(fraction_char, '\0', 10);
itoa( (int)pbuf3->hour, hour_char, 10 );
itoa( (int)pbuf3->minute, minute_char, 10 );
itoa( (int)pbuf3->second, second_char, 10 );
itoa( (int)pbuf3->fraction, fraction_char, 10 );
int len_year = strlen(year_char);
int len_month = strlen(month_char);
int len_day = strlen(day_char);
int len_hour= strlen(hour_char);
int len_minute = strlen(minute_char);
int len_second = strlen(second_char);
int len_fraction = strlen(fraction_char);
p = new SQLCHAR[len_year+len_month+len_day+len_hour+len_minute+len_second+len_fraction+6];
int k;
for (k=0; k<len_year; k++) p[k] = year_char[k];
p[len_year] = ',';
for (k=len_year+1; k<len_year+1+len_month; k++) p[k] = month_char[k-len_year-1];
p[len_year+1+len_month] = ',';
for (k=len_year+1+len_month+1; k<len_year+1+len_month+1+len_day; k++) p[k] = day_char[k-len_year-1-len_month-1];
p[len_year+1+len_month+1+len_day] = ',';
for (k=len_year+1+len_month+1+len_day+1; k<len_year+1+len_month+1+len_day+1+len_hour; k++) p[k] = hour_char[k-len_year-1-len_month-1-len_day-1];
p[len_year+1+len_month+1+len_day+1+len_hour] = ',';
for (k=len_year+1+len_month+1+len_day+1+len_hour+1; k<len_year+1+len_month+1+len_day+1+len_hour+1+len_minute; k++) p[k] = minute_char[k-len_year-1-len_month-1-len_day-1-len_hour-1];
p[len_year+1+len_month+1+len_day+1+len_hour+1+len_minute] = ',';
for (k=len_year+1+len_month+1+len_day+1+len_hour+1+len_minute+1; k<len_year+1+len_month+1+len_day+1+len_hour+1+len_minute+1+len_second; k++) p[k] = second_char[k-len_year-1-len_month-1-len_day-1-len_hour-1-len_minute-1];
p[len_year+1+len_month+1+len_day+1+len_hour+1+len_minute+1+len_second] = ',';
for (k=len_year+1+len_month+1+len_day+1+len_hour+1+len_minute+1+len_second+1; k<len_year+1+len_month+1+len_day+1+len_hour+1+len_minute+1+len_second+1+len_fraction; k++) p[k] = fraction_char[k-len_year-1-len_month-1-len_day-1-len_hour-1-len_minute-1-len_second-1];
s_len = len_year+len_month+len_day+len_hour+len_minute+len_second+len_fraction+6;
}
delete pbuf3;
break;
default:
re = SQLColAttribute(statement, (SQLUSMALLINT)index, SQL_DESC_LENGTH, NULL, 0, NULL, (void*)(&buf_len));
buf_len++;
p = new SQLCHAR[buf_len];
memset(p,'\0',buf_len);
s_len = buf_len - 1;
re = SQLGetData(statement, (SQLUSMALLINT)index, SQL_C_CHAR, (void*)p, buf_len, &str_len);
if (str_len==SQL_NULL_DATA) {
p[0] = '\0';
s_len = 0;
} else {
s_len = str_len;
}
}
if (re == SQL_SUCCESS || re == SQL_SUCCESS_WITH_INFO){
return p;
} else {
SQLCHAR sql[255];
SQLINTEGER err;
SQLCHAR mes[255];
memset (mes, '\0', 10);
memset (sql, '\0', 10);
SQLSMALLINT len;
SQLGetDiagRec(SQL_HANDLE_STMT, statement, 1, sql, &err, mes, 255, &len);
}
} catch (...) {
}
return NULL;
}
int GetMoreResults(SQLHSTMT statement) {
try {
SQLRETURN re;
re = SQLMoreResults(statement);
if (re==SQL_SUCCESS||re==SQL_SUCCESS_WITH_INFO) {
return 1;
}
} catch (...) {
}
return -1;
}
int GetColumnAttribute(SQLUSMALLINT type, SQLHSTMT statement,int index, SQLCHAR buf[], SQLSMALLINT len, SQLSMALLINT &str_len) {
memset(buf,'\0',len);
try {
SQLRETURN re;
SQLINTEGER iresult;
SQLINTEGER result = 0;
if (type == 2 || type == 6
|| type == 1005 || type == 1006
|| type == 11 || type == 12
|| type == 10 || type == 1008
|| type == 13 || type == 8) {
re = SQLColAttribute(statement,index,type,NULL,0,NULL,(void*)(&result));
SQLCHAR* ft;
ft = buf;
ltoa(result,(char*)ft,10);
} else {
re = SQLColAttribute(statement,(SQLUSMALLINT)index,type,(void*)buf,len,&str_len,(void*)(&iresult));
}
if (re==SQL_SUCCESS||re==SQL_SUCCESS_WITH_INFO) {
return 1;
} else {
SQLCHAR sql[255];
SQLINTEGER err;
SQLCHAR mes[255];
memset (mes, '\0', 10);
memset (sql, '\0', 10);
SQLSMALLINT len;
SQLGetDiagRec(SQL_HANDLE_STMT, statement, 1, sql, &err, mes, 255, &len);
}
} catch (...) {
}
return -1;
}
SQLINTEGER GetRowCount(SQLHSTMT statement) {
SQLRETURN re;
SQLINTEGER result;
try {
re = SQLRowCount(statement,&result);
if (re == SQL_SUCCESS || re == SQL_SUCCESS_WITH_INFO) {
return result;
} else {
SQLCHAR sql[255];
SQLINTEGER err;
SQLCHAR mes[255];
memset (mes, '\0', 10);
memset (sql, '\0', 10);
SQLSMALLINT len;
SQLGetDiagRec(SQL_HANDLE_STMT, statement, 1, sql, &err, mes, 255, &len);
}
} catch (...) {
}
return -1;
}
int GetDataMeta(SQLHDBC connection,SQLUSMALLINT infotype,SQLCHAR buf[],int len,SQLSMALLINT &str_len) {
memset(buf,'\0',len);
SQLRETURN re;
SQLUINTEGER value = 0;
try {
if (infotype == 49 || infotype == 50 || infotype == 51
|| infotype == 52 || infotype == 86 || infotype == 48
|| (infotype>=53 && infotype<=71) || infotype == 115
|| infotype==91 || infotype==92 || infotype==80
|| infotype==112 || infotype==108 || infotype==0
|| infotype==101 || infotype==100 || infotype==97
|| infotype==98 || infotype==99 || infotype==74
|| infotype==88 || infotype == 75 || infotype==118
|| infotype==114|| infotype==95 || infotype==96
|| infotype==23 || infotype==24 || infotype==30
|| infotype==22 || infotype==93 || infotype==28
|| infotype==84 || infotype==85 || infotype==31
|| infotype==102 || infotype==32 || infotype==33
|| infotype==34 || infotype==104 || infotype==103
|| infotype==105 || infotype==1 || infotype==35
|| infotype==106 || infotype==107 || infotype==26
|| infotype==46 || infotype==72 || infotype==44
|| infotype==147 || infotype==168 || infotype==145
|| infotype==121) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -