c++连接sqlserver的两种方式

#include "stdafx.h"
#include "MFCApplicationSqlServer.h"
#include "MFCApplicationSqlServerDlg.h"
#include "afxdialogex.h"
#include <icrsint.h>
#include <windows.h>  
#include <sqltypes.h>  
#include <sql.h>  
#include <sqlext.h>
//方式一
#pragma comment(lib,"odbc32.lib")
//方式二

//#import "c:\program files\common files\system\ado\msado15.dll"  no_namespace rename("EOF", "adoEOF")

//方式一:ODBC华丽的分割线/
SQLHENV env;        //environment handle  
SQLHDBC dbc;        //connection handle  
SQLHSTMT stmt;      //state handle  
SQLRETURN ret;      //result return  
 
//查询的结果返回到这些变量里  
SQLCHAR sno[64];  
SQLINTEGER grade;  
SQLINTEGER cbSno , cbGrade ;

//环境句柄
ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env);     
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
char c[512];
sprintf_s(c,"DRIVER={SQL Server};SERVER=192.168.1.29;DATABASE=baoshang;UID=sa;PWD=ebank@123;");

SQLCHAR outstr[1024];
SQLSMALLINT outstrlen;
ret = SQLDriverConnect(dbc, NULL, (SQLCHAR *)c, SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_NOPROMPT);

int intTemp = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);  
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt))  
{  
AfxMessageBox("Failed to connect");
}  
else  
{  
// 基本上每个SQLExecDirect()都要初始化句柄 
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);  
ret = SQLSetStmtAttr(stmt, SQL_ATTR_ROW_BIND_TYPE, (SQLPOINTER)SQL_BIND_BY_COLUMN, SQL_IS_INTEGER);  

//查询  
ret = SQLExecDirect(stmt, (SQLCHAR *)("SELECT * FROM dbo.TB_DICT_CONTTYPE"), SQL_NTS);  
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)  
{  
/*  句柄、列、变量类型、接收缓冲、缓冲长度、返回的长度   */  
ret = SQLBindCol(stmt, 1, SQL_C_LONG, &grade, 0, &cbGrade);  
//ret = SQLBindCol(stmt, 2, SQL_C_CHAR, cno, CNO_LEN, &cbCno);  
ret = SQLBindCol(stmt, 3, SQL_C_CHAR, sno, 64, &cbSno);  
}  
//遍历数据  
while ((ret = SQLFetch(stmt)) != SQL_NO_DATA_FOUND)  
{  
if (ret == SQL_ERROR)   printf("fetch error\n");  
else  
{  
char szS[128];
sprintf_s(szS,"%d:%s",grade,sno);
AfxMessageBox(szS);
}  
}   
SQLFreeHandle(SQL_HANDLE_STMT, stmt);  
SQLDisconnect(dbc);  
SQLFreeHandle(SQL_HANDLE_DBC, dbc);  
SQLFreeHandle(SQL_HANDLE_ENV, env);  
}


//方式二:ADO/华丽的分割线///
_ConnectionPtr  sqlSp;
HRESULT hr=sqlSp.CreateInstance(_uuidof(Connection));

if(FAILED(hr))
{
AfxMessageBox("_ConnectionPtr对象指针实例化失败!!!");
return ;
}
else {
try {
_bstr_t strConnect="Driver={sql server};server=192.168.1.29;uid=sa;pwd=ebank@123;database=baoshang;";
sqlSp->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error &e) 
{
AfxMessageBox(e.Description());
return;
}
_RecordsetPtr m_pRecordset;
if(FAILED(m_pRecordset.CreateInstance( _uuidof( Recordset ))))
{
AfxMessageBox("记录集对象指针实例化失败!");
return;
}
try {
m_pRecordset->Open("select * from  dbo.TB_DICT_CONTTYPE",(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic, adCmdText);
}
catch (_com_error &e)
{
AfxMessageBox(e.Description());
return;
}
try {
m_pRecordset->MoveFirst();
while(!m_pRecordset->adoEOF) 
{
CString insertTime=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("F_TYPE_ID"))->Value);
AfxMessageBox(insertTime);
m_pRecordset->MoveNext();
}
}
catch (_com_error &e)
{
AfxMessageBox(e.Description());
return;
}
}

  • 6
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
连接SQL Server数据库可以使用多种方法,以下是其中一种常见的方法: 首先,我们需要在计算机上安装SQL Server数据库,并确保数据库已启动。然后,我们需要打开SQL Server Management Studio(SSMS)工具,该工具是用于管理、查询和编写SQL语句的界面。 在SSMS中,我们可以选择“连接到服务器”选项,然后输入要连接SQL Server数据库的服务器名称。对于本地服务器,可以使用"."代替服务器名称。接下来,我们需要选择身份验证方法,通常有“Windows身份验证”和“SQL Server身份验证”两种选项。如果选择“Windows身份验证”,则使用当前登录的Windows用户进行身份验证;如果选择“SQL Server身份验证”,则需要输入已创建的SQL Server登录名和密码进行身份验证。 点击“连接”按钮后,SSMS将尝试连接到指定的SQL Server数据库。如果连接成功,我们将能够看到数据库对象(如表、视图等)和执行SQL查询。 连接SQL Server数据库还可以使用其他方法,例如使用编程语言中的数据库连接库(如Java中的JDBC、Python中的pyodbc等),通过提供服务器名称、身份验证信息和数据库名称来建立连接。这些方法通常需要指定数据库连接字符串,并使用相应的库函数进行连接。 总的来说,连接SQL Server数据库需要提供服务器名称、身份验证信息和数据库名称,并使用相应的工具或库函数进行连接,以便进行数据库管理和查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值