用VC怎么连接SQL数据库??

用VC怎么连接SQL数据库??,第1张

我用的是数据源ODBC。先打开控制面板上的管理工具。然后打开数据源。添加描述数据什么。然后去到vc那里。新建单个文档。下一步选择W数据库查看使用文件支持,单击Database Source 按钮。选择之前你设好的数据源。 就连好了数据库了。

(1).在文件stdafx.h中最后一个#endif的前一行写入

#import "C:\program files\common files\System\ado\msado15.dll" no_namespace \

rename("EOF","EndOfFile") \

rename("LockTypeEnum","newLockTypeEnum")\

rename("DataTypeEnum","newDataTypeEnum")\

rename("FieldAttributeEnum","newFieldAttributeEnum")\

rename("EditModeEnum","newEditModeEnum")\

rename("RecordStatusEnum","newRecordStatusEnum")\

rename("ParameterDirectionEnum","newParameterDirectionEnum")

如果你的系统不是安装在C盘的话就把#import 后面的C改成系统所有的盘

(2).在C***App类的

public:下加入

_RecordsetPtr m_pADOSet

bool ADOExecute(_RecordsetPtr &ADOSet, _variant_t &strSQL)

在private:下加入_ConnectionPtr ADOConn

在class C***App : public CWinApp

{

...

}之后#endif之前加入extern C***App theApp

(3)在BOOL C***App::InitInstance()函数中Enable3dControls()// Call this when linking to MFC statically这一行下面加入

if( FAILED(::CoInitialize(NULL)) )

{

AfxMessageBox("ADO Init failed")

return false

}

try

{

ADOConn.CreateInstance(__uuidof(Connection))

ADOConn->Open("DSN=OBDC数据源Provider=MSDASQL","用户","密码", adConnectUnspecified)//这一行要自已修改

}

catch(_com_error &e)

{

CString err

err.Format("%s", (char*)(e.Description()) )

AfxMessageBox(err)

}

catch(...)

{

AfxMessageBox("Unknown Error...")

}

m_pADOSet.CreateInstance(__uuidof(Recordset))

并在文件最后加上如下代码:

bool C***App::ADOExecute(_RecordsetPtr &ADOSet, _variant_t &strSQL)

{

if ( ADOSet->State == adStateOpen) ADOSet->Close()

try

{

ADOSet->Open(strSQL, ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown)

return true

}

catch(_com_error &e)

{

CString err

err.Format("ADO Error: %s",(char*)e.Description())

AfxMessageBox(err)

return false

}

}

最后就可以在登录时执行SQL语句了,比如用户为CString strUser, 密码是CString strPwd数据库表是user_table(user_id, user_name, user_pwd)则

_variant_t strQuery, Holder

strQuery = "select * from user_table where user_name='"+strUser +"' and user_pwd='"+ strPwd +"'"

theApp.ADOExecute(theApp.m_pADOSet, strQuery)

int iCount = theApp.m_pADOSet->GetRecordCount()

if ( 0==iCount )

{

AfxMessageBox(_T("密码错误"), MB_ICONEXCLAMATION)

return

}

else

{

AfxMessageBox(_T("登录成功"), MB_ICONEXCLAMATION)

}

下面是本人学数据库时作的笔记:应该还算挺具体的,其实主要就是几个参数,而SQL语句都是一样的。

使用Connection对象的Execute

_RecordsetPtr connection15::Execute(_bstr_t CommandText,VARIANT* RecordsAffected, long Options)

CommandText 命令文本

RecordsAffected *** 作完成后所影响的行数

Options 命令文本的类型 取值和Recordset类的Open函数中的Options一样。

_variant_t aff

theApp.m_pConn->Execute(_T("insert into name(姓名,性别,年龄)alues('zhong',false,21)"),&aff,adCmdText)

record1=m_pConn->Execute(_T("select count(*) from name"),&aff,adCmdText)

使用Command对象的Execute

_CommandPtr m_pComm

m_pComm.CreateInstance(__uuidof(Command))

m_pComm->ActiveConnection=theApp.m_pConn

m_pComm->CommandText=_T("insert into name(姓名,性别,年龄) values('chang',false,22)")

m_pComm->Execute(NULL,NULL,adCmdText)

strSql.Format("select distinct num from bank1 where bank='%s'",entry->name)

strSql=_T("select distinct bank from bank1")

strSql.Format("select sum(amount) from bank1 where num='%s'",str1)

注意:不管是哪个对象执行SQL命令返回的Recordset都是只读的,不能对数据进行修改。如要修改只能使用Recordset类自己的Open函数。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存