请教:MFC多线程数据库编程ado,数据库访问冲突。

请教:MFC多线程数据库编程ado,数据库访问冲突。,第1张

用多线程同步技术,即一个线程将要取得数据区锁定,另一个线程此时不能存取此块的数据。

看看多线程同步的书。

例如:

void CCalibPage1::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

UpdateData()

m_nCounter++

double r

CSingleLock sLock(&(gpMainFrm->m_mutex))

sLock.Lock()//此处锁定

double v = gSpindleRevolution

sLock.Unlock()//存取后释放。

if(m_bCalibStart)

{

r = m_CalibValue/v

m_szTestValue0.Format("%f",v)

// m_szTestValue.Format("%f", (v * r))

m_szRatio.Format("%f", r)//

UpdateData(false)

}

else if(m_bVerify)

{

m_szTestValue.Format("%f",v*gcConfig.calib[PCL833_CHANNEL].ratio)

UpdateData(false)

}

if(m_nCounter >30)

{

KillTimer(11)

m_bCalibStart = false

m_bVerify = false

MessageBox(_T("标定完成!"),_T("CNCTest"))

UpdateButtonStatus()

}

CPropertyPage::OnTimer(nIDEvent)

}

参见:

http://baike.baidu.com/view/2808915.htm

定义一个全局的互斥事件CMunex cMunex;

当你在一个线程里要连接数据库的时候可以这样:cMunex.lock()

处理完以后可以这样 :cMunex.unlock()

这样就OK了。应该可以解决问题了

1. 配置SQL Server外围应用服务器,开启SQL Server 2005远程连接功能:

“配置工具”->“SQL Server外围应用配置器”->选择“服务和连接的外围应用配置器”->选择Database Engine节点下的 “远程连接”->选择“本地连接和远程连接”->选择“同时使用TCP/IP和named pipes”->点击确定,重新启动

数据库

服务。

2. 把登陆设置改为SQL Server 和 Windows 身份验证模式:

打开SQL Server Management Studio管理器,点击服务器上面右键然后查看属性,在安全性选项里面对服务身份验证选择“SQL Server 和 Windows 身份验证模式”。

3.修改SQL Server sa的密码:

在SQL Server Management Studio管理器中,展开服务器上的“安全性”->登陆名->在sa帐号上点右键属性,这样在“常规”的选择页中更改sa登陆帐号的密码。注意SQL Server2005中,不允许密码设置简单,否则会通不过。然后在选择页的“状态”的登录修改为启用。

4.设置SQL Server 的端口号

在SQL Server Configuration Manager管理器中,展开SQL Server 2005 Network Configuration项目 ->单击下面的 Protocols for 'dbname' ->在右侧的窗口中,右键单击"TCP/IP"项,选择"属性" ->打开"TCP/IP properties"窗口 - >单击"IP Address"选项卡 ->将所有IP地址下面的 "TCP Port" 值设置成1433

5.确保开启SQL Server服务

在SQL Server Configuration Manager管理器中, 选中SQL Server 2005 Services,在右侧的窗口中启动SQL Server ('YourInstance'),

6. 修改连接字符串,在字符串中加入SQl Server 服务的端口号.

strConnection.Format("driver={SQL Server}Server=xx.xx.xx.xx,1433DATABASE=mydatabaseUID=namePWD=pwd")

7.连接coder:

stdafx.h中引用:

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

8. 连接SQL SERVER服务器,并连接数据库

if(!AfxOleInit()) //这就是初始化COM库

{

AfxMessageBox("数据库初始化出错!")

}

_ConnectionPtr pCn("ADODB.Connection")

pCn->Open((_bstr_t)"Driver=

{SQL Server}Server=127.0.0.1,1433Database=carcomUID=saPWD=abc123456","","",adModeUnknown)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9935762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存