vc ado 连接sql server 的方式.在sql版没解决。解决给分。

海子0011 2009-06-03 08:04:03

发表于:2009-06-01 22:37:49 楼主
ADO连接数据库通常有三种方法:System DSN Connection,DSN-less Connection 和 OLE DB Connection,这是大家都很熟悉的,它们的使用方法如下:

(注:三种方法的区别在于使用的是哪个关键字 - DSN,Driver,Data Source,Provider。UID,PWD 是 ODBC 的标记,User ID,Password 是 OLEDB 的标记。特别指出的是 Data Source 在 ODBC 标记中表示数据源,等同于 DSN,在 OLEDB 标记中表示服务器名或数据库名。)

'System DSN Connection
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "DSN=your_dsn;UID=user_name;PWD=password;"//(1)通过odbc数据源连接
'或者用 OLEDB 标记
cnn.Open "Data Source=your_dsn;User ID=user_name;Password=password;"
//(2)通过oledb,oledb通过odbc数据
//源连接
'DSN-less Connection
'以SQL Server为例
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "driver={SQL Server};server=server_name;uid=user_name;pwd=pwd;database=pubs"
//(3)如何通过odbc连接数据库的。和(1)有什么区别
'OLE DB Connection
'以SQL Server为例
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "provider=sqloledb;data source=server_name;initial catalog=pubs;
user id=user_name;password=pwd;"//(4)通过oledb直接连接数据库
问题是注释(3),大家给解释下。解决给分
...全文
148 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
海子0011 2009-06-04
  • 打赏
  • 举报
回复
up
海子0011 2009-06-04
  • 打赏
  • 举报
回复
道理很对,但不能光光说道理把。
8楼正解。
谢谢所以前辈。
给分。
ZOthello 2009-06-04
  • 打赏
  • 举报
回复
CString strConnection=_T("");
strConnection = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = ");
strConnection+=CurrentDirectory;
pAdoDb->SetConnectionString(strConnection);
if (!pAdoDb->Open(strConnection))//打开到数据库的连接
{
AfxMessageBox("连接数据库失败");
return;
}

我用ADO是这么连接数据库的,你可以看看~~
ly830817 2009-06-04
  • 打赏
  • 举报
回复
odbc连接的两种不同方式而已~~~
贪玩的老鼠 2009-06-04
  • 打赏
  • 举报
回复
3和1
3指定了数据驱动,和数据服务器和密码,它只能连接SQL服务器.

1你可以通过配置ODBC,访问任何类型的数据库比如excel,MYSQL等.
cnn.Open "DSN=your_dsn;UID=user_name;PWD=password;"//(1)通过odbc数据源连接

cnn.Open "driver={SQL Server};server=server_name;uid=user_name;pwd=pwd;database=pubs"
峰白 2009-06-04
  • 打赏
  • 举报
回复
up
saiyaman5 2009-06-04
  • 打赏
  • 举报
回复
建议多看看MSDN,里面有介绍

搞清楚ado,oledb,odbc的层次结构,这些问题就明白了,

不要停留在拼字符串的格式上,这都是表面的东西
software_520 2009-06-04
  • 打赏
  • 举报
回复
给分啊。
software_520 2009-06-04
  • 打赏
  • 举报
回复
用法如下:
if( !theApp.m_bIsConnectDB )
{
CString strConnect;
try
{
//连接数据库
theApp.ConstructConnectString(strConnect);
if(!theApp.ConnectDB(strConnect))
{
MessageBox(_T("CAccountDlg::OnBtnLogin()中连接数据库失败,\r\n无法完成验证工作。")
,_T("友情提示"));
SendMessage(WM_CLOSE);
return;
}
else
{
theApp.m_bIsConnectDB = true;
}
}
catch(_com_error& e)
{
CString error;
error.Format("CAccountDlg::OnBtnLogin()中\r\n连接数据库出现异常。\
\r\n%s\r\n%s",e.ErrorMessage(),(char*)e.Description());
AfxMessageBox(_T(error));
SendMessage(WM_CLOSE);
return;
}
}
software_520 2009-06-04
  • 打赏
  • 举报
回复
我平时都用OLEDB方式连接的,下面把我的连接方法给你,你看行不行。
在需要连接的时候先调用ConstructConnectString(CString &s)函数构造出连接字符串,
然后调用ConnectDB(CString &strConnect)函数连接数据库。
void CConsumptionApp::ConstructConnectString(CString &s)
{
//本地连接
s.Format("Provider=SQLOLEDB; Server=%s; Database=%s; uid=%s; pwd=%s;"
,m_strServerName,m_strDBName,m_strUid,m_strPwd);
}


bool CConsumptionApp::ConnectDB(CString &strConnect)
{
_bstr_t bstrConnect(strConnect);
HRESULT hr=S_OK;
hr=m_pConnect.CreateInstance(__uuidof(Connection));
if(FAILED(hr))
{
AfxMessageBox(_T("CConsumptionApp::ConnectDB()中\r\n_ConnectionPtr创建实例失败。"));
return false;
}
try
{
m_pConnect->CursorLocation=adUseClient;
hr=m_pConnect->Open(bstrConnect,"","",adConnectUnspecified);
if(FAILED(hr))
{
// AfxMessageBox(_T("CConsumptionApp::ConnectDB()中\r\n_ConnectionPtr连接数据库失败。"));
m_pConnect=NULL;
return false;
}
}
catch(_com_error& e)
{

CString error;
error.Format("CConsumptionApp::ConnectDB()中\r\n_ConnectionPtr连接数据库出现异常。\
\r\n%s\r\n%s",e.ErrorMessage(),(char*)e.Description());
AfxMessageBox(_T(error));

if(adStateOpen==m_pConnect->State)
{
m_pConnect->Close( );
}
m_pConnect=NULL;
return false;

}
return true;
}


saiyaman5 2009-06-04
  • 打赏
  • 举报
回复
据我所知,ADO是对OLE DB 的进一步封闭
所以ADO 一定是调用ole db,ole db 可以直接调用Ole db驱动,也可以调用odbc接口,odbc再调odbc驱动


(1) 与 (3) 过程都应该是

ado -> oledb接口 -> odbc接口 -> odbc驱动

不同的是(3)指定了odbc驱动程序SQL Server
而(1)只指定了dsn, dsn 不一定要用SQL Server 这个驱动程序来建


海子0011 2009-06-03
  • 打赏
  • 举报
回复
up
dfpgb 2009-06-03
  • 打赏
  • 举报
回复
(3)不是用ADO直接连接的吗?
(1)是通过ODBC连接的啊当然不一样啊.你得建立一个名字叫做"your_dsn"的数据源才能连接啊,不是吗?

更深的说不了 我超级菜
海子0011 2009-06-03
  • 打赏
  • 举报
回复
up

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧