MFC中到底如何用OEBC连接SQL数据库 求助啊~~ 所有资料都只是说连接到数据源什么的 我注册数据源成功了 连也连成功了总之就是连到了去ODBC 不能连去SQL的样子 不过调用SQL又貌似要用到ODBC驱动 现在的情况就像ODBC本身就是一个库 现在只能连接ODBC而不能连SQL 而ODBC 。。 哎 乱 求助啊!!!到底~~~怎么连到指定的SQL库的啊? 有从开始到结束的简单例子吗?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很简单的.MSDN有示例代码。#include <afxdb.h>void CMFCTestDlg::OnLButtonDblClk(UINT nFlags, CPoint point){ CDatabase db; CRecordset Record(&db); if (db.OpenEx(TEXT("Driver={SQL Server};Server=192.168.0.190;Database=master;Uid=sa;Pwd=sa;"),CDatabase::openReadOnly)) MessageBox(TEXT("数据库连接成功!")); TRY { Record.Open(CRecordset::forwardOnly, TEXT("SELECT * from sysfiles")); }CATCH(CDBException, e) { MessageBox(e->m_strError); return; } END_CATCH; CString Name; CString FileName; CString tmp; while(!Record.IsEOF()) { Record.GetFieldValue(TEXT("name"), Name); Record.GetFieldValue(TEXT("filename"), FileName); tmp.Format(TEXT("%s\n%s"), Name, FileName); MessageBox(tmp); Record.MoveNext(); } Record.Close(); db.Close(); CDialog::OnLButtonDblClk(nFlags, point);} 下面的代码我测试了,没有问题,strSourceName就是数据源的名称CString connstr; connstr.Format(_T("Provider=MSDASQL.1;Persist Security Info=False;Data Source=%s"), strSourceName); try { HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection)); m_pConnection->CursorLocation = adUseClient; m_pConnection->ConnectionTimeout = 5; if ( SUCCEEDED(hr) ) { hr = m_pConnection->Open(_bstr_t(connstr),"","",adModeUnknown); } } catch (_com_error e) { int nSel = ::MessageBox( NULL, e.Description() + _T("是否退出?"), _T("连接"), MB_YESNO); if (IDYES == nSel) { exit(0); } } 我程序上用的ODBC的连接代码 你看看 //连接数据库 CDatabase m_db; CRecordset rs,rsSiteCount,rs1,rs2,rsconnt,rsReaderID; TRY { m_db.OpenEx(strcon,CDatabase::noOdbcDialog); rs.m_pDatabase = &m_db; rsSiteCount.m_pDatabase = &m_db; rs1.m_pDatabase = &m_db; rs2.m_pDatabase = &m_db; rsconnt.m_pDatabase = &m_db; rsReaderID.m_pDatabase = &m_db; } CATCH(CDBException,ex) { AfxMessageBox(ex->m_strError); AfxMessageBox(ex->m_strStateNativeOrigin); } AND_CATCH(CMemoryException,pEx) { pEx->ReportError(); AfxMessageBox(_T("memory exception")); } AND_CATCH(CException,e) { TCHAR szError[100]; e->GetErrorMessage(szError,100); AfxMessageBox(szError); } END_CATCH_begin: //查询站点数 CString sqlSiteCount,SiteCount; sqlSiteCount.Format(_T("select count(fid) as SiteCount from tim_site ")); try { rsSiteCount.Open(AFX_DB_USE_DEFAULT_TYPE,sqlSiteCount); //打开查询记录 rsSiteCount.GetFieldValue(_T("SiteCount"),SiteCount); rsSiteCount.Close(); } catch(CDBException * ex) { AfxMessageBox(ex->m_strError); AfxMessageBox(ex->m_strStateNativeOrigin); } catch(CException * e) { TCHAR szError[100]; e->GetErrorMessage(szError,100); AfxMessageBox(szError); } CString strcon; strcon.Format(_T("DSN=SQLDNS;UID=%s;PWD=%s;"),UserName2,PassWord2); 回facelc:select count(fid) as SiteCount from tim_site 这样的语句是什么来的??? 注册数据源,是为了把ODBC驱动和指定数据库连接在一起吗? 差不多就是这个意思ODBC的操作方式就是通过数据源操作 插入:insert into table1(field1,field2) values(value1,value2) 有谁能完整解释下这SQL语句啊?里面的table1(field1,field2) values(value1,value2)是什么意思?? table1是你要插入的表名field1,field2是要设置的字段名value1,value2是要设置的值 建议Lz找本好点的书看看吧,把基本数据库连接语句的参数和SQL简单语句学习一下,这比我们说的要权威的多,也系统得多~ CDatabase *myado; CRecordset *myado_re; myado=new CDatabase; myado_re=new CRecordset(myado); myado_re->m_pDatabase=myado; myado->OpenEx(_T("DSN=crash_ku2"),CDatabase::noOdbcDialog) ; CString word(_T("select 1,9,8")),word02; myado_re->Open(CRecordset::forwardOnly,word); myado_re->GetFieldValue(1,word02); MessageBox(word02);我这么写道 但是输出的word02是9,我无语~~~~这是什么意思啊?? 怎么给CString 设置条件断点 std::find,std::find_end,std::find_if 三者有什么区别?它们中谁的效率比较高? 如何判断一个进程是“未响应”状态? wave 的问题,详见内 一直郁闷中,救俺一把 mscomm控件 接收数据的问题 郁闷?用VC++开发数据库,怎么样,高手指教 CArray<int,int&> TmpArray;是什么意思 ? 如何使每100毫秒调用一下我的线程函数 C/C++中的内存泄漏问题 Modbus TCP/IP通讯编程 VC 读取后台数据库MySQL中的中文字符,在程序中显为问号(一个汉字对应一个问号)!
void CMFCTestDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CDatabase db;
CRecordset Record(&db);
if (db.OpenEx(TEXT("Driver={SQL Server};Server=192.168.0.190;Database=master;Uid=sa;Pwd=sa;"),CDatabase::openReadOnly))
MessageBox(TEXT("数据库连接成功!"));
TRY
{
Record.Open(CRecordset::forwardOnly, TEXT("SELECT * from sysfiles"));
}CATCH(CDBException, e)
{
MessageBox(e->m_strError);
return;
}
END_CATCH; CString Name;
CString FileName;
CString tmp;
while(!Record.IsEOF())
{
Record.GetFieldValue(TEXT("name"), Name);
Record.GetFieldValue(TEXT("filename"), FileName);
tmp.Format(TEXT("%s\n%s"), Name, FileName);
MessageBox(tmp);
Record.MoveNext();
} Record.Close();
db.Close(); CDialog::OnLButtonDblClk(nFlags, point);
}
connstr.Format(_T("Provider=MSDASQL.1;Persist Security Info=False;Data Source=%s"), strSourceName);
try
{
HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->CursorLocation = adUseClient;
m_pConnection->ConnectionTimeout = 5;
if ( SUCCEEDED(hr) )
{
hr = m_pConnection->Open(_bstr_t(connstr),"","",adModeUnknown);
}
}
catch (_com_error e)
{
int nSel = ::MessageBox( NULL,
e.Description() + _T("是否退出?"),
_T("连接"),
MB_YESNO); if (IDYES == nSel)
{
exit(0);
} }
CDatabase m_db;
CRecordset rs,rsSiteCount,rs1,rs2,rsconnt,rsReaderID;
TRY
{
m_db.OpenEx(strcon,CDatabase::noOdbcDialog);
rs.m_pDatabase = &m_db;
rsSiteCount.m_pDatabase = &m_db;
rs1.m_pDatabase = &m_db;
rs2.m_pDatabase = &m_db;
rsconnt.m_pDatabase = &m_db;
rsReaderID.m_pDatabase = &m_db;
}
CATCH(CDBException,ex)
{
AfxMessageBox(ex->m_strError);
AfxMessageBox(ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox(_T("memory exception"));
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox(szError);
}
END_CATCH_begin:
//查询站点数
CString sqlSiteCount,SiteCount;
sqlSiteCount.Format(_T("select count(fid) as SiteCount from tim_site "));
try
{
rsSiteCount.Open(AFX_DB_USE_DEFAULT_TYPE,sqlSiteCount); //打开查询记录
rsSiteCount.GetFieldValue(_T("SiteCount"),SiteCount);
rsSiteCount.Close(); }
catch(CDBException * ex)
{
AfxMessageBox(ex->m_strError);
AfxMessageBox(ex->m_strStateNativeOrigin); }
catch(CException * e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox(szError);
}
strcon.Format(_T("DSN=SQLDNS;UID=%s;PWD=%s;"),UserName2,PassWord2);
ODBC的操作方式就是通过数据源操作
有谁能完整解释下这SQL语句啊?里面的table1(field1,field2) values(value1,value2)是什么意思??
field1,field2是要设置的字段名
value1,value2是要设置的值
这比我们说的要权威的多,也系统得多~
CRecordset *myado_re;
myado=new CDatabase;
myado_re=new CRecordset(myado);
myado_re->m_pDatabase=myado;
myado->OpenEx(_T("DSN=crash_ku2"),CDatabase::noOdbcDialog) ;
CString word(_T("select 1,9,8")),word02;
myado_re->Open(CRecordset::forwardOnly,word);
myado_re->GetFieldValue(1,word02);
MessageBox(word02);我这么写道 但是输出的word02是9,我无语~~~~这是什么意思啊??