1: CString strConn,strSql,strSqlResult,testID,testCol,m_new;//变量声明
2: long nID;
3: strConn.Format("ODBC;Driver={SQL Server};Server=***;Database=***;Uid=***;Pwd=***");
4: CDatabase database;
5: database.Open(NULL,false,false,strConn);
6: CRecordset rs( &database );
7: strSql = "select id,tel from Company";
8: rs.Open(CRecordset::forwardOnly,strSql,CRecordset::readOnly);
9: //通过循环更新公司的电话
10: while (!rs.IsEOF()){
11: rs.GetFieldValue("id",testID);
12: rs.GetFieldValue("tel",testCol);
13: nID = atoi(testID);
14: m_new = (testCol经过一此处理后赋给m_new)............;
15: strSqlResult.Format("update Company set tel ='%s' where id = %d",m_new,nID);
16: try{
17: database.ExecuteSQL(strSqlResult);//在这一步报错"连接占线导致另一个hstmt"
18: }catch(CDBException e){
19: AfxMessageBox("Error:"+e.m_strError);
20: }
21: rs.MoveNext();
22: }
23: database.Close();
请问是怎么回事啊???
5 个解决方案
#1
就是你的程序中有两个或两个以上的地方执行了数据库操作,而这个数据库操作的地方采用的是同一个连接,所以会出现这个问题.
#2
是同时执行
#3
但是没有啊,,,上面的代码,,我写在一个按钮的事件里...整个程序也就只有这一段代码在访问数据库啊????
#4
你那个是循环啊,应该是上一次的循环中没有执行完数据库操作,下一个循环又进来了。所以才出现的这个问题。需要在循环中加个暂停的东西。
#5
一个连接,不能在打开着记录集的同时去执行sql语句的,必须用两个不相干的连接,或者另一种方法也可以:把记录集做成本地的,让它不占用这个连接。
#1
就是你的程序中有两个或两个以上的地方执行了数据库操作,而这个数据库操作的地方采用的是同一个连接,所以会出现这个问题.
#2
是同时执行
#3
但是没有啊,,,上面的代码,,我写在一个按钮的事件里...整个程序也就只有这一段代码在访问数据库啊????
#4
你那个是循环啊,应该是上一次的循环中没有执行完数据库操作,下一个循环又进来了。所以才出现的这个问题。需要在循环中加个暂停的东西。
#5
一个连接,不能在打开着记录集的同时去执行sql语句的,必须用两个不相干的连接,或者另一种方法也可以:把记录集做成本地的,让它不占用这个连接。