MFC连接数据库方法

    MFC为我们提供了对于数据库操作的几个基本类:CDatabase, CRecordSet, CRecordView, CDatabaseException

   我们要做的就是直接使用,这会大大减轻我们的编程负担:

   1.首先建立数据库和表,例如使用SQL Server创建数据库test,并且建立几张表。完成后,在ODBC数据源管理中加入我们的这个数据库;

   2.在Visual Studio中打开类向导,选择添加类->MFC ODBC Consumer,然后会选择数据源和数据库中对应的表,这样就快速建立了CRecordSet的派生类,每个CRecodSet类         都对应我们在数据库中的一张表,类名就是C+表面,类的数据成员就是表中的项。同时自动生成的还有DSN和连接字符串,这样我们在后面使用只需Open()就行了。

   3.对数据库的实际操作,以具体代码为例:

     

void CDemoDlg::OnBnClickedButtonSavetodb()
{
	UpdateData(); 

	BOOL ifRoadAddSuccess;
		
	int currentRecordNum = 0;       //记录当前数据库中已有多少条记录作为RoadID,数字要加1

	//道路数据不完整的时候则不用再继续进行下去了
	if( m_strRoadName.IsEmpty() || m_strRoadWidth.IsEmpty() || m_strMaxSpeed.IsEmpty() )
	{
		AfxMessageBox(_T("道路数据不完整,无法操作,请检查!"));
		return;
	}
	else
	{
		try
		{
			CDatabase db;
			CMyRoad roadRecordSet;		

			if( roadRecordSet.Open() )         //打开数据集
			{
				//int currentRecordNum = 0;       //记录当前数据库中已有多少条记录
				while( !roadRecordSet.IsEOF() )
				{
					currentRecordNum++;
					roadRecordSet.MoveNext();
				}
			
				//开始添加数据
				roadRecordSet.AddNew();   //进入添加新纪录模式

				roadRecordSet.m_RoadID = currentRecordNum+1;  
				roadRecordSet.m_RoadName = m_strRoadName;
			
				int widthTemp,MaxSpeedTemp;   
				widthTemp = _ttoi(m_strRoadWidth);    //CString to int
				MaxSpeedTemp = _ttoi(m_strMaxSpeed);

				roadRecordSet.m_Width = widthTemp;
				roadRecordSet.m_MaxSpeed = MaxSpeedTemp;
				roadRecordSet.m_PointsNum = m_ListControl.GetItemCount();   //ListControl里有多少行就有多少个点
					
				//添加结束后更新记录集
				roadRecordSet.Update();     //更新记录集
				ifRoadAddSuccess = roadRecordSet.Requery();
		
				//close recordSet and database
				roadRecordSet.Close();
				db.Close();
			}
		}
		catch( CDBException* pe)
		{
			AfxMessageBox(pe->m_strError);
			pe->Delete();
		}
	
		

		//最后给出操作是否成功的提示
		if( ifRoadAddSuccess )
		{
			AfxMessageBox(_T("数据添加成功!"));
		}
		else
		{
			AfxMessageBox(_T("数据添加出现问题!"));
		}
		
		//重新赋值为空以便接受新的数据
		m_strRoadName = "";
		m_strRoadWidth = "";
		m_strMaxSpeed = "";
	}
}

     其他的删除,修改操作类似,都是打开了CRecordSet后再根据不同需要进行操作。很简便吧?呵呵

你可能感兴趣的:(MFC)