用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 展开
#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 展开
展开全部
(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);
不知道能否帮到你,参考下把
#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);
不知道能否帮到你,参考下把
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询