写入记录的代码:
CString strSQL;
int a[15]={1,2,3,4,1,2,3,5,6,7,8,9,1,2};
strSQL.Format("INSERT INTO TestTable(列1,列2,列3)VALUES('%d','%s','%s')",a[0],a[1],a[2]);
ExecuteSQL(strSQL);ExecuteSQL(strSQL);是自己写的一个执行SQL语句的函数,代码出下:
try
{
// 是否已经连接数据库
if(m_Connection == NULL)
OnInitADOConn();//初始化并建立ADO连接
m_Connection->Execute((_bstr_t)m_strSQL,NULL,adCmdText);
return true;
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format("操作失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
return false;
}
编译是可以通过的,没错,可是执行时就提示“"ox1021674c"指令引用的“ox00000001”内存。该内存不能为"REED"”
CString strSQL;
int a[15]={1,2,3,4,1,2,3,5,6,7,8,9,1,2};
strSQL.Format("INSERT INTO TestTable(列1,列2,列3)VALUES('%d','%s','%s')",a[0],a[1],a[2]);
ExecuteSQL(strSQL);ExecuteSQL(strSQL);是自己写的一个执行SQL语句的函数,代码出下:
try
{
// 是否已经连接数据库
if(m_Connection == NULL)
OnInitADOConn();//初始化并建立ADO连接
m_Connection->Execute((_bstr_t)m_strSQL,NULL,adCmdText);
return true;
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format("操作失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
return false;
}
编译是可以通过的,没错,可是执行时就提示“"ox1021674c"指令引用的“ox00000001”内存。该内存不能为"REED"”
(LPCTSTR)e.Description()才能看到好的错误提示。
多谢了,按你说的改了,可还没有提示出错原因,只是“"ox1021674c"指令引用的“ox00000001”内存。该内存不能为"REED"”
列1 int 4 0
列2 char 10 1
列3 char 10 1
编译都正常,没有调试,直接叹号 执行没有崩溃呀,可是就弹出对话框说“"ox1021674c"指令引用的“ox00000001”内存。该内存不能为"REED"”
可是我表里存的是字符型的,不是整型的呀
列1 int 4 0
列2 char 10 1
列3 char 10 1
晕,原来你是那样理解的啊
这个SQL字符串和表里面的字段类型没太大关系,它会自己转换,转换不了会报错
之前看到文章说要用 _varant_t中间转换,可是我转了好多次,总提示不行,就怕了,然后就定义一样的,你意思是说,不用管表里声名的是啥类型,也不用管外部数组a[]的格式,都可以'%d'格式化后存入数据库中(数据库会根据表中的数据格式自动转化)? 是这样嘛? 我菜鸟一个,问的问题可能的BC了一点,多谢指教了先。
%c是格式化字符的
%s是格式化字符串的
……这些是C基础知识里面的你的程序中定义是int类型的数组,格式化数组的每个成员肯定应该用%d啊