VC++程序用ODBC技术连接SQL-Server2005出现“对于造型说明无效的字符”错误
数据库建表:
CREATE TABLE TRAINING_STUDENT
(
STUDENT_ID CHAR(10) NOT NULL,
STUDENT_NAME VARCHAR(10) NULL,
STUDENT_SEX VARCHAR(2) NULL,
STUDENT_AGE CHAR(3) NULL,
STUDENT_NATION VARCHAR(10) NULL,
STUDENT_NATIVE_PLACE VARCHAR(8) NULL,
STUDENT_IDENTITY_CARD_NO CHAR(20) NULL,
STUDENT_MARRIAGE_STATUS VARCHAR(8) NULL,
STUDENT_HEALTH_STATUS VARCHAR(10) NULL,
STUDENT_ATTEND_JOB_TIME DATE NULL,
STUDENT_HOME_ADDRESS VARCHAR(50) NULL,
STUDENT_TELEPHONE_NUMBER CHAR(12) NULL,
STUDENT_EMAIL VARCHAR(20) NULL,
)
下面是将新数据写进数据库的实现代码: CString csSQL = _T("");
int i = 1;
int nFlag = 0;
while (!nFlag)
{
CTrainingStudentSet m_recordset(&m_database);
csSQL.Format(_T("select * from TRAINING_STUDENT where STUDENT_ID = %d"),i);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,csSQL); // 打开数据集
if (m_recordset.GetRecordCount() == 0)
{
csSQL.Format(_T("insert into TRAINING_STUDENT values(%d,\'%s\',\'%s\',%d,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%d-%d-%d\',\'%s\',\'%s\',\'%s\')"),
i,
m_csStudentName,
m_csSex,
m_nStudentAge,
m_csNation,
m_csNativePlace,
m_csIdentityCardNo,
m_csMarriageStatus,
m_csHealthStatus,
m_ctAttendJobTime.GetYear(),m_ctAttendJobTime.GetMonth(),m_ctAttendJobTime.GetDay(),
m_csHomeAddress,
m_csTelephoneNumber,
m_csEmailAddress
);
m_database.ExecuteSQL(csSQL); // 执行SQL文
m_database.Close(); // 关闭数据库
nFlag = 1;
} i++;
} CDialog::OnOK();
}
数据库表格可以顺利建立,C++程序也没有显示语法错误,但是在测试执行文件准备输入新数据时,会弹出“对于造型说明无效的字符”对话框,在应用程序上看不到新输入的数据,但去数据库里可以发现刚输入的新数据。这是什么原因?
数据库建表:
CREATE TABLE TRAINING_STUDENT
(
STUDENT_ID CHAR(10) NOT NULL,
STUDENT_NAME VARCHAR(10) NULL,
STUDENT_SEX VARCHAR(2) NULL,
STUDENT_AGE CHAR(3) NULL,
STUDENT_NATION VARCHAR(10) NULL,
STUDENT_NATIVE_PLACE VARCHAR(8) NULL,
STUDENT_IDENTITY_CARD_NO CHAR(20) NULL,
STUDENT_MARRIAGE_STATUS VARCHAR(8) NULL,
STUDENT_HEALTH_STATUS VARCHAR(10) NULL,
STUDENT_ATTEND_JOB_TIME DATE NULL,
STUDENT_HOME_ADDRESS VARCHAR(50) NULL,
STUDENT_TELEPHONE_NUMBER CHAR(12) NULL,
STUDENT_EMAIL VARCHAR(20) NULL,
)
下面是将新数据写进数据库的实现代码: CString csSQL = _T("");
int i = 1;
int nFlag = 0;
while (!nFlag)
{
CTrainingStudentSet m_recordset(&m_database);
csSQL.Format(_T("select * from TRAINING_STUDENT where STUDENT_ID = %d"),i);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,csSQL); // 打开数据集
if (m_recordset.GetRecordCount() == 0)
{
csSQL.Format(_T("insert into TRAINING_STUDENT values(%d,\'%s\',\'%s\',%d,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%d-%d-%d\',\'%s\',\'%s\',\'%s\')"),
i,
m_csStudentName,
m_csSex,
m_nStudentAge,
m_csNation,
m_csNativePlace,
m_csIdentityCardNo,
m_csMarriageStatus,
m_csHealthStatus,
m_ctAttendJobTime.GetYear(),m_ctAttendJobTime.GetMonth(),m_ctAttendJobTime.GetDay(),
m_csHomeAddress,
m_csTelephoneNumber,
m_csEmailAddress
);
m_database.ExecuteSQL(csSQL); // 执行SQL文
m_database.Close(); // 关闭数据库
nFlag = 1;
} i++;
} CDialog::OnOK();
}
数据库表格可以顺利建立,C++程序也没有显示语法错误,但是在测试执行文件准备输入新数据时,会弹出“对于造型说明无效的字符”对话框,在应用程序上看不到新输入的数据,但去数据库里可以发现刚输入的新数据。这是什么原因?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货