失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于ODBC的MFC与sql_serverr2连接教程和错误解决方法

基于ODBC的MFC与sql_serverr2连接教程和错误解决方法

时间:2019-10-14 10:59:32

相关推荐

基于ODBC的MFC与sql_serverr2连接教程和错误解决方法

基于ODBC的MFC与sql_serverr2连接教程和错误解决方法

应用环境:

编译平台:vs

数据库:Mysql Serverr2

桥接软件: ODBC(微软提供的开放数据库连接器)

用MFC读写数据库的内容之前,需要分别对数据库server,ODBC,vs进行配置。

本文主要分为五大部分。第一部分介绍数据库server的配置;第二部分介绍ODBC的配置;第三部分介绍vs的配置;第四部分介绍MFC读写server数据库的一个简单实例;第五部分介绍一些常见的错误类型和解决方案。

注意:数据库安装教程请参考【数据库安装】文章

文章标题:MYSQLServerR2详细的图文安装教程

网址:/naibozhuan3744/article/details/78562769

一、数据库server的配置

1.1对sql server配置管理器进行配置,操作如下:

【开始菜单】-【Microsoft SQL Server R2】-【配置工具】-【SQL Server配置管理器】

1.2将协议名称【Named Pipes】的状态,改为已启用状态(初始状态为已禁用),修改后的状态如下图所示:(修改方法:在图标右击-启动)

1.3启动sql server数据库登录界面

【开始菜单】–【Microsoft SQL Server R2】–【SQL Server Management Studio】

在【身份验证(A)】处,选择【SQL Server 身份验证】,然后将之前安装数据库时,设置的登录名和密码填写。比如我的登录名和密码如下:

登录名:sa

密码:sa

1.4在登录界面上,创建一个新的数据库,之后的c++程序将在这个数据库中读写数据。比如我新创建了一个Student数据库,在表里面添加了如下内容。

1.5在【安全性】-【登录名】-【sa】-【属性】(对图片sa单击右键,弹出属性对话框)界面,填写新的sa账号和密码。(不建议修改,如果之前安装的时候没有账号密码,可以在这里重新设置一个用于登录的账号密码)

并且确保选择页的【状态】是如下图所示:

1.6确保【数据库(根目录)】-【属性】(单击右键弹出属性对话框)-【安全性】的配置如下图所示:

二、 ODBC的配置

2.1打开ODBC

【开始菜单】-【运行框】输入ODBC,搜索出如下结果,然后选择第一个【数据源(ODBC)】,弹出如下界面。

我已经创建了一个SQL Server,接下来将重新创建一个。

2.2在【用户DSN】一栏下面的【添加】按钮,单击添加。在弹出的对话框中选择SQL Server,然后点击【完成】按钮。如下图所示:

弹出如下对话框:

【名称】:填写之前创建的sa账号

【服务器】:填写安装数据库时选择的(local)

单击【下一步】,弹出如下对话框:

选择用ID和密码登录验证

【登录ID】:sa

【登录密码】:sa

单击【下一步】,将【更改默认的数据库为】下面的组合框选择Student(之前用sql server数据库新创建的数据库,之后的程序将对这个Student数据库进行读写)

单击【下一步】选择默认的

然后单击【完成】,测试成功,表明之前配置正确。

三、 vs的配置

3.1新建一个MFC空白工程,如下图所示。

3.2创建好一个新的工程后,修改工程属性

将【字符集】改为【使用多字节字符集】

3.3此时,只要在函数中实例一个数据库对象,就可以调用数据库中的函数,对数据库进行读写操作,实例一个数据库对象代码如下:

CDatabase m_db;

四、 MFC读写server数据库的几个简单实例

4.1示例程序1:

//函数功能:动态及方式打开记录集,循环读数据库第一行数据,第二行数据,直到最后一行

CDatabase m_pdatabase;

CString str1, strSql, str2, str3, str4, str5, str6;

int count =0;

int a2 =m_pdatabase.Open(NULL,FALSE,FALSE,"ODBC;DSN=sa;UID=sa;PWD=sa");

CRecordset Sample(&m_pdatabase);

CString a10 =Sample.GetDefaultConnect();

int a3 =Sample.Open(CRecordset::dynaset,_T("Select*from [dbo].[boss]"));

int a4 =Sample.IsOpen();

Sample.MoveFirst();

while(!Sample.IsEOF())

{

Sample.GetFieldValue("姓名", str2);

Sample.GetFieldValue("公司", str3);

Sample.GetFieldValue("年龄", str4);

Sample.GetFieldValue("婚姻状况", str5);

Sample.GetFieldValue("学历", str6);

if(Sample.m_strFilter = "[年龄] = 49")

Sample.m_strFilter= "[年龄]";

Sample.MoveNext();

}

Sample.m_strFilter= "[年龄] = 49";

Sample.m_strSort ="[年龄]";

int a80 =Sample.Requery();

Sample.m_strSort ="[年龄]";

strSql =Sample.GetSQL();

Sample.Requery();

4.2示例程序2:

//函数功能:只读方式打开记录集,先将数据从数据库读到记录集缓冲区,然后按照年龄进行排序,读到设置的CString变量中

CDatabase m_pdatabase;

CString str1, strSql, str2, str3, str4, str5, str6, sSql;

int a2 =m_pdatabase.Open(NULL,FALSE,FALSE,"ODBC;DSN=sa;UID=sa;PWD=sa");

CRecordset Sample(&m_pdatabase);

sSql = "SELECT name, age "

"FROM [dbo].[boss] "

"ORDER BY age ";

int a3 =Sample.Open(CRecordset::forwardOnly, sSql,CRecordset::readOnly);//只读语句

while(!Sample.IsEOF())

{

Sample.GetFieldValue("name", str2);//从数据库中读出数据,读表头为"姓名"下面的第一数据

Sample.MoveNext();

}

Sample.Close();

4.3示例程序3:删除,插入,修改数据库中的数据

CDatabase m_pdatabase;

CString str1, strSql;

int count =0;

int a2 =m_pdatabase.Open(NULL,FALSE,FALSE,"ODBC;DSN=sa;UID=sa;PWD=sa");//打开数据库

CRecordset Sample(&m_pdatabase);//CRecordset

int a3 =Sample.Open(CRecordset::dynaset,_T("Select*from [dbo].[boss]"));//打开记录集

int a4 =Sample.IsOpen();

CString sSql;

sSql.Empty();//删除一组记录集

sSql = "DELETE FROM [Student].[dbo].[boss]WHERE name='媛媛' AND公司='健坤' AND婚姻状况='未婚'";//"徐景周",

m_pdatabase.ExecuteSQL(sSql);// m_pdatabase

sSql.Empty();//插入一组记录集

sSql = "INSERT INTO[Student].[dbo].[boss](name,公司,age,婚姻状况,学历,序列号) VALUES ('媛媛','健坤',26,'未婚','本科',NULL)";//"徐景周",

m_pdatabase.ExecuteSQL(sSql);// m_pdatabase

sSql.Empty();//修改张三的序列号,从1变为10 ORDER BY age DESC

sSql = "UPDATE [Student].[dbo].[boss] SET序列号=5 WHERE name='媛媛'";//"徐景周",

m_pdatabase.ExecuteSQL(sSql);// m_pdatabase

Sample.Close();

五、 MFC的视图类自动生成的类,编译出现典型错误

5.1错误代码:

CString Cboss::GetDefaultConnect()

{

CString str = "DSN=sa;Description=\x5b89\x88c5mysql\x521b\x5efa\x7684\x6570\x636e\x670d\x52a1\x5668;UID=sa;PWD=sa;APP=Microsoft\x00aeVisual Studio\x00ae ;WSID=TJQ-PC;DATABASE=Student";

return _T(str);

}

5.2错误提示:

error C: “23433”: 对字符来说太大 e:\1tjq\vs\project1\mysqltest2\mysqltest2\boss.cpp 31 1 MySqlTest2

5.3解决办法

将字符串里面的反斜杠”\”,全部改为双斜杠“\\”,修改后的正确代码如下:

CString Cboss::GetDefaultConnect()

{

CString str = "DSN=sa;Description=\\x5b89\\x88c5mysql\\x521b\\x5efa\\x7684\\x6570\\x636e\\x670d\\x52a1\\x5668;UID=sa;PWD=sa;APP=Microsoft\\x00aeVisual Studio\\x00ae ;WSID=TJQ-PC;DATABASE=Student";

return _T(str);

}

参考内容:

/circlesquare/article/details/6929777

/module/articleContent.php?id=231

/a/doc//0511/1994197.html?from=haosou

/mysql-tutorials-126613.html

/good90/archive//03/04/2379371.html

/u013719984/article/details/51108816

/mytt_10566/article/details/56277697

/yulihu123456%40126/blog/static/373242821222134117/

如果觉得《基于ODBC的MFC与sql_serverr2连接教程和错误解决方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。