"连接占线导致另一个hstmt"这是什么错啊?

时间:2021-07-30 15:38:16
大家帮我看看在操作MSSQL数据库时哪里出错了.   错误是17行报的.
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语句的,必须用两个不相干的连接,或者另一种方法也可以:把记录集做成本地的,让它不占用这个连接。