C++与SQL Server2008连接及配置

SQL Server2008配置

安装完成后需要确保SQL Server服务启动,启动的步骤如下:
1. 在开始菜单–>Microsoft SQL Server 2008 R2–>配置工具–>sql server 配置管理器,打开配置管理器,切换到如下界面
这里写图片描述
在这个界面中启动如图中的服务,启动方法:右击–>启动
如果切换开启用户为本地电脑账户,则需要本地电脑账户设置密码,否则会提示错误

然后切换到如下界面:
这里写图片描述
在这个界面中启动右侧中SQL Server(MSSQLSERVER)这个选项(如果是启动状态,配置了如上中的界面,就需要重新启动)
2. 在开始菜单–>Microsoft SQL Server 2008 R2–>SQL Server Management Studio,打开SQL Server Management Studio软件登陆数据库如下图所示:
这里写图片描述
配置账户sa
点击连接进入数据库管理界面,,在数据库中已经默认创建了一个登陆名(sa), 右击登陆名下的sa–>属性,进入如下界面
这里写图片描述
在这个界面(常规)中设置密码(密码确认密码是以后用sa登陆数据库的密码),切换到状态界面中,如下图设置
这里写图片描述
如果禁用拒绝,C++连接就会出现异常
配置数据库安全性连接配置
配置数据库的安全性,右击数据库服务(根目录)–>属性–>安全性,如下图配置:
这里写图片描述
服务器身份验证一定要选择SQL Server和Windows 身份验证模式,否则C++用sa这个用户名登陆不上,会出现提示未知错误
连接选项卡中,勾选允许连接到此服务器,不然连接数据库失败

SQL Server2008的问题

  1. 已成功与服务器建立连接,但是在登录过程中发生错取。(provider:共享内存提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL Server,错误:233)
    解决方法:打开程序所有程序Microsoft SQL Server 2005配置工具SQL Server 配置管理器,在弹出的窗体中,找到SQL Server 2005 网络配置,把MSSQLSERVER的协议下的Named PipesTCP/IP启动,然后重新启动Microsoft SQL Server 2005就可以了。
  2. SQL Server 配置管理器远程过程调用失败。[0x800706be]解决方案
    电脑上安装了两个版本的SQL server,卸载另个SQL server版本

C++操作SQL Server2008

连接数据库

  1. 加载.dll文件
using namespace std;
#import "path\\msado15.dll" no_namespace rename("EOF", "adoEOF")  /*path是msado15.dll的路径*/
/*在类中定义如下几个变量*/
_ConnectionPtr m_pConnection;  
_CommandPtr m_pCommand;  
_RecordsetPtr m_pRecordSet;/*如果_ConnectionPtr提示未找到,检查你的msado15.dll路径是否设置正确*/
  1. 连接数据库
HRESULT hr=CoInitialize(NULL);  //初始化COM  ;  
if(FAILED(hr))
{
    //初始化COM失败  ;  
    return;
}
hr = m_pConnection.CreateInstance(("ADODB.Connection")); /*创建实例*/
/*hr = m_pConnection.CreateInstance(__uuidof (Connection ));*/
if(FAILED(hr))
{
    //对象指针实例化失败  ;  
    return;
}
try  
{
    _bstr_t strConnect= "Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=QPServerInfoDB;Data Source=192.168.1.7,1433;";/*Data Source 是本机IP地址或者网络地址*/
    /*"Provider=SQLOLEDB.1;Password=123;Persist Security Info=False;User ID=sa;Initial Catalog=QPServerInfoDB;Data Source=PC201602252148";*/
    /*"Driver={sql server};server=PC201602252148;uid=sa;pwd=123"*/
    /*"Driver={sql server};server=192.168.0.7,1433;uid=sa;pwd=123"*/
    hr=hr=m_pConnection->Open(strConnect, L"",L"", adModeUnknown);
    if(FAILED(hr))/*FAILED(hr)代表hr<0*/
    {
        /*打开数据库失败*/
    }
} 
catch(_com_error &e)  
{  
    MessageBox(e.ErrorMessage()); /*打印出异常原因*/
}

连接数据库中Persist Security Info=True这个属性的解释
Persist Security Info属性的意思是表示是否保存安全信息,其实可以简单的理解为”ADO在数据库连接成功后是否保存密码信息”,
True表示保存,False表示不保存
测试环节

数据库连接前

ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=yzs;Data Source=ydgl22;Persist Security Info=false"

数据库连接成功后

ConnectString="Provider=MSDAORA.1;User ID=yzs;Data Source=ydgl22"

数据库连接前

ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=yzs;Data Source=ydgl22;Persist Security Info=true"

数据库连接成功后

ConnectString="Provider=MSDAORA.1;Password=mypassword;User ID=dlyx;Data Source=ydgl22"

C++连接问题

  1. IDispatch error #3149异常
    检查数据库是否可以连接,测试方法:
    新建一个.txt文件,重命名为新建文本文档.udl,然后
    检查strConnect字符串是否合法,右击属性–>提供程序,选择如下:
    这里写图片描述
    切换到连接,如下:
    这里写图片描述
    点击测试连接
  2. 未知错误
    服务没有开启,或者没有按照上面的步骤设置服务器,设置完成后要重启
  • 11
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以给你提供一个简单的示例代码。在使用这个代码前,你需要安装并配置好ADO库。 ```c++ #include <iostream> #include <string> #include <windows.h> #include <comdef.h> #include <atlbase.h> #include <atlstr.h> #include <stdio.h> #include <conio.h> #include <time.h> #include <fstream> #include <vector> #include <algorithm> #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") using namespace std; class ADOConnection { private: _ConnectionPtr m_pConnection; public: ADOConnection(); ~ADOConnection(); bool Open(const char* connectionString); bool ExecuteSQL(const char* sql); bool ExecuteSP(const char* spName, const char* params); _RecordsetPtr GetRecordset(const char* sql); }; ADOConnection::ADOConnection() { HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection)); if (FAILED(hr)) { _com_error err(hr); cerr << "CreateInstance Error: " << err.ErrorMessage() << endl; exit(-1); } } ADOConnection::~ADOConnection() { if (m_pConnection->State == adStateOpen) { m_pConnection->Close(); } } bool ADOConnection::Open(const char* connectionString) { try { m_pConnection->Open(connectionString, "", "", adModeUnknown); return true; } catch (_com_error& e) { cerr << "Connect Error: " << e.ErrorMessage() << endl; return false; } } bool ADOConnection::ExecuteSQL(const char* sql) { try { m_pConnection->Execute(sql, NULL, adCmdText); return true; } catch (_com_error& e) { cerr << "ExecuteSQL Error: " << e.ErrorMessage() << endl; return false; } } bool ADOConnection::ExecuteSP(const char* spName, const char* params) { try { CString strCmd; strCmd.Format("{ call %s(%s) }", spName, params); m_pConnection->Execute(_bstr_t(strCmd), NULL, adCmdText | adExecuteNoRecords); return true; } catch (_com_error& e) { cerr << "ExecuteSP Error: " << e.ErrorMessage() << endl; return false; } } _RecordsetPtr ADOConnection::GetRecordset(const char* sql) { try { _RecordsetPtr pRecordset("ADODB.Recordset"); pRecordset->Open(sql, m_pConnection.GetInterfacePtr(), adOpenKeyset, adLockReadOnly, adCmdText); return pRecordset; } catch (_com_error& e) { cerr << "GetRecordset Error: " << e.ErrorMessage() << endl; return NULL; } } ``` 这是一个基本的ADO连接类,封装了连接数据库、执行 SQL 语句和存储过程、获取记录集等常用操作,可以根据需要进行扩展。其中,`_ConnectionPtr`、`_RecordsetPtr` 等是 COM 对象的智能指针,用于自动管理对象的生命周期。 你可以在自己的代码中调用这些方法,实现对 SQL Server 数据库的增删查改操作。例如: ```c++ int main() { ADOConnection conn; if (!conn.Open("Provider=SQLOLEDB;Data Source=.;Initial Catalog=test;User ID=sa;Password=password")) { cerr << "Connect failed!" << endl; return -1; } if (!conn.ExecuteSQL("insert into mytable (name, age) values ('张三', 18)")) { cerr << "Insert failed!" << endl; return -1; } _RecordsetPtr pRecordset = conn.GetRecordset("select * from mytable"); while (!pRecordset->adoEOF) { CString name = pRecordset->GetCollect("name"); int age = pRecordset->GetCollect("age"); cout << name << "\t" << age << endl; pRecordset->MoveNext(); } return 0; } ``` 这个示例代码中包括了连接数据库、插入数据、查询数据等操作,你可以根据需要修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值