用vc++连接到sql server数据库

有没有方法不通过在MFC下使用ADO或OBDC的方法,因为我要将.c文件作为子程序插入到其他软件中,所以能不能只通过一个.c文件就连接到sqlserver数据库,并读取数... 有没有方法不通过在MFC下使用ADO或OBDC的方法,因为我要将.c文件作为子程序插入到其他软件中,所以能不能只通过一个.c文件就连接到sql server数据库,并读取数据。
#include "mdi_c.h"
#include "math.h"
#define M 8388608
#define T 2045
double MYRAND( double1)
{
double x,r,k,y,x1,x0;
int j,i;
x0=1;
x1=1;
for(j=0;j<1;j++)
{
k=0;
for(i=0;i<12;i++)
{
x=fmod(T*x0,M);
r=x/M;
k=r+k;
}
y=fmod(T*x1,M);
x1=y;
x0=x1;
}
return(k-6);
}
void vc_initialize_user()
{
vc_function_add ("MYRAND",(FUNCTION)MYRAND,fn_R_R,1,0);
}就是这样格式的文件
希望发一份源程序,非常感谢,加分 1047488955@qq.com
展开
 我来答
wankadingche
2012-04-28
知道答主
回答量:76
采纳率:0%
帮助的人:21.7万
展开全部
(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:下加入
private:
     _ConnectionPtr ADOConn;
--------------------------------------------------------------------------
在class C***App : public CWinApp
{
...
};之后#endif之前加入
extern CxxxApp 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 CxxxApp::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 sqlQuery ;
sqlQuery = "select * from user_table where user_name='"+strUser +"' and
user_pwd='"+ strPwd +"'";
theApp.ADOExecute(theApp.m_pADOSet, sqlQuery );
int iCount = theApp.m_pADOSet->GetRecordCount();
if ( 0==iCount )
{
     AfxMessageBox(_T("密码错误"), MB_ICONEXCLAMATION);
     return;
}
else
{
     AfxMessageBox(_T("登录成功"), MB_ICONEXCLAMATION);
不知道能否帮到你,参考下把
爱心觉罗d2d3e
2012-04-28
知道答主
回答量:32
采纳率:0%
帮助的人:11万
展开全部
呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式