从工具箱向form1窗体上拖一个按钮和datagridview控件,按钮是触发连接数据库获取数据集,按钮的名称为显示,datagridview控件是用于显示数据集内容
单击解决方案资源管理器中的引用文件夹然后右键选择添加引用,选择浏览后打开mysql.data.dll,这是c#连接mysql数据库的动态库,里面封装了很多常用的 *** 作数据库的方法
在解决方案资源管理器中的form1.cs的代码中加入using MySql.Data.MySqlClient这就是代码中的实际引用mysql.data.dll中的内容,有了这个c#就能很方便地 *** 作sql数据库
在按钮的单击事件中添加如下代码
string str = "Server=127.0.0.1User ID=rootPassword=123456Database=testCharSet=gbk"
MySqlConnection con = new MySqlConnection(str)//实例化链接
con.Open()//开启连接
string strcmd = "select * from user"
MySqlCommand cmd = new MySqlCommand(strcmd, con)
MySqlDataAdapter ada = new MySqlDataAdapter(cmd)
DataSet ds = new DataSet()
ada.Fill(ds)//查询结果填充数据集
dataGridView1.DataSource = ds.Tables[0]
con.Close()//关闭连接
使用navicat软件在数据库test中新建表user,然后新建两个字段username和password(图中的栏位),navicat软件是mysql的图形化界面工具,负责新建表以及备份等数据库 *** 作,直观地通过界面来 *** 作
7
数据库建好后就可以执行工程了,单击显示按钮执行结果如下,出现username和password说明数据库连接成功,由于没有添加数据所以下面为空
可以使用mfc类中的数据库类结合listcontrol控件完成。listcontrol控件用于查询记录集的显示。数据库类包括CDatabase(数据库类),CRecordSet(记录集类)和CRecordView(可视记录集类)。 其中: CDatabase类对象提供了对数据源的连接,对数据源进行 *** 作。 CRecordView类对象能以控制的形式 显示数据库记录。这个视图是直接连到一个CRecordSet对象的表视图。 CRecordSet类对象提供了从数据源 中提取出的记录集。
首先应用AppWizard来建立一个ODBC的应用程序框架,注意应包括头文件afxdb.h。 其中两个最重要的类是CDatabase和CRecordSet。下面说一下数据库 *** 作的方法,以SQL为例:
方法一:查询记录使用CRecordSet::Open()和 CRecordSet::Requery()成员函数。在使用CRecordSet类对象之前,必须使用 CRecordSet::Open()函数来获得有效的记录集。一旦已经使用过CRecordSet::Open() 函数,再次查询时就可以应用CRecordSet::Requery()函数。
方法二:通 过调用CDatabase::ExecuteSQL()函数来完成SQL语句的直接执行: 如下代码所示 BOOL CDB::ExecuteSQLAndReportFailure(const CString&strSQL) { TRY { m_pdb->ExecuteSQL(strSQL)//直接执行SQL语句 } CATCH (CDBException,e) { CString strMsgstrMsg.LoadString(IDS_EXECUTE_SQL_FAILED)strMsg+=strSQLreturn FALSE} END_CATCH return TRUE}
其中,方法一仅提供查询记录的功能;方法二直接对数据库进行 *** 作,可以进行查询、修改、删除、添加记录等一系列功能,具有更强的灵活性,但在使用时需要谨慎。
再说一下listcontrol控件的使用:
它主要用于数据的显示。关键用到的函数是InsertColumn()和SetItemText()函数,您可以参照mfc类帮助文件。
MFC程序访问数据库不是那么简单的,需要很多初始化代码,建立ADO连接并使用接口。网上很多相关完整资料,搜“VC ADO MYSQL”,灰常多。
下面是一个比较精炼的描述:
1、应用程序的stdafx.h头文件中(也可以在其他合适的地方)包含如下语句。
#import "C://program files//common files//system//ado//msado15.dll"
no_namespace rename ("EOF", "adoEOF")
2、链接数据库
CoInitialize(NULL)
//初始化Com组件
_ConnectionPtr
conPtr//数据库链接指针
//
conPtr.CreateInstance("ADODB.Connection")
//Connection用于与数据库服务器的链接
conPtr.CreateInstance(__uuidof(Connection))
//Connection用于与数据库服务器的链接另一种方式
try
{
conPtr->ConnectionTimeout = 5//设置连接时间
//
MySqlTest为数据源名 localhost表示本地
root表示用户名 sa表示密码
//链接方式1,使用这种方式链接时要注意在设置数据源时一定要选择一个数据库
//conPtr->Open("DSN=MySqlTestserver=localhost","root","sa",adModeUnknown)///连接MySql数据库(测试成功)
//链接方式2采用这种方式链接时在创建数据源时没有必要选择一个数据库 conPtr->Open("DSN=MySqlTestserver=localhostdatabase=test","root","sa",adModeUnknown)///连接MySql数据库(测试成功)
}
catch(_com_error e) //捕捉异常
{
AfxMessageBox(e.ErrorMessage())
}
CoUninitialize()//释放com组件//不知是否有必要
3、访问数据库
_RecordsetPtr recordPtr//数据集指针
recordPtr.CreateInstance(__uuidof(Recordset))
CString
cmdStr=_T("select name,stuno from
student")//student为表名 该表中有两个字段name(字符型)stuno(int型)
try
{
recordPtr->Open(_variant_t(cmdStr),
conPtr.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText)
}
catch
(_com_error e)
{
AfxMessageBox(e.Description())
}
while
(!(recordPtr->adoEOF))
{//获取记录
CString
name=(CString)recordPtr->GetCollect(_variant_t("name")).bstrVal
int
no=recordPtr->GetCollect(_variant_t("stuno")).intVal
recordPtr->MoveNext()
}
recordPtr->Close()//关闭记录集
recordPtr.Release()//释放空间
conPtr->Close()//关闭连接
conPtr.Release()//释放空间
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)