C++访问SQLServer数据库

Jasonli8205 2007-02-01 04:33:07
我想写一个纯C++的程序,就是不用vc提供的MFC等类库,只用标准的C++库!现在想访问MSSQLServer数据库。该怎么做呢?如果有例子提供,小弟不胜感谢!
...全文
3066 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fautan 2008-01-15
  • 打赏
  • 举报
回复
可以用托管c++直接使用.netframework很方便
Jimmy817 2007-11-01
  • 打赏
  • 举报
回复
请问 iu_81 大侠:
代码中 m_pConnection->Open(strConnect, " ", " ",adModeUnknown) 第二.三个参数是不是数据库 userid 和password?
我得到如下的错误,是怎么回事:
qld001 2007-08-14
  • 打赏
  • 举报
回复
记得import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
部分要在所有的include之后阿
Zhentiwei 2007-08-14
  • 打赏
  • 举报
回复
学习学习
xuejinn 2007-08-14
  • 打赏
  • 举报
回复
mark
roger_77 2007-02-02
  • 打赏
  • 举报
回复
OTL提供了一些使用OTL访问数据库的简单例子,可以下载来参考:
http://otl.sourceforge.net/otl4_examples.zip

http://otl.sourceforge.net/otl3_down.htm
roger_77 2007-02-02
  • 打赏
  • 举报
回复
可以考虑使用OTL类库,它是一个可跨平台的C++模板库:
http://otl.sourceforge.net

OTL 4.0 is a C++ library based on templates. It integrates all of the previous releases into one library.

OTL 4.0 is ANSI C++ compliant (ANSI C++ typecasts, clean templatized code, etc.), tightly integrated with the Standard Template Library (STL) via so-called STL-compliant stream iterators, and natively supports the STL std::string's in otl_stream's.

The current version of the OTL supports :
Oracle 7 (natively via OCI7),
Oracle 8 (natively via OCI8),
Oracle 8i (natively via OCI8i),
Oracle 9i (natively via OCI9i),
Oracle 10g (natively via OCI10g),
DB2 (natively via DB2 CLI),
ODBC 3.x as well as ODBC 2.5 compliant data sources in MS Windows and Unix (e.g. Oracle,
MS SQL Server,
Sybase,
Informix,
MySQL,
DB2,
Interbase / Firebird,
PostgreSQL,
SQLite,
SAP/DB,
TimesTen,
MS ACCESS,
etc.).
The list of supported database backends is constantly growing.


ben_bear 2007-02-01
  • 打赏
  • 举报
回复
char * query_cmd = "DELETE FROM stu_info WHERE sname = '本拉登'";
应该是 char * query_cmd = "DELETE FORM stu_info WHERE sname = '本拉登'";
吧?
是FORM吧?
hertcloud 2007-02-01
  • 打赏
  • 举报
回复
JF....
HewpKanXue 2007-02-01
  • 打赏
  • 举报
回复
纯C++不知道数据库为何物
miniplayer 2007-02-01
  • 打赏
  • 举报
回复
学习
iu_81 2007-02-01
  • 打赏
  • 举报
回复
利用ADO访问MS SQL2000
要求: 【1】输出stu_info表内的每一条记录
【2】添加一条新记录
【3】删除名字为"本拉登"的记录
*/
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
#include <iostream>
#include <iomanip> //for setw()
using namespace std;
class STU
{
 public:
  char snum[10]; //学号
  char sname[10]; //姓名
  char ssex[2]; //姓别
  long sage; //年龄
  char smajor[20]; //专业
 public:
  STU(){}
  ~STU(){}
};
int main()
{
 STU student;
 ::CoInitialize(NULL); // 初始化OLE/COM库环境 ,为访问ADO接口做准备
 _RecordsetPtr m_pRecordset("ADODB.Recordset");
 _ConnectionPtr m_pConnection("ADODB.Connection");
 _bstr_t bstrSQL("select * from stu_info"); //查询语句
 char * query_cmd = "DELETE FROM stu_info WHERE sname = '本拉登'";
 try
 {
  // 创建Connection对象
  m_pConnection.CreateInstance("ADODB.Connection");
  // 设置连接字符串,必须是BSTR型或者_bstr_t类型
  _bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student; uid=sa; pwd=123;";
  //若数据库在网络上则Server为形如(192.168.1.5,3340)
  //用户sa和密码123只是针对我的库
  m_pConnection->Open(strConnect,"","",adModeUnknown);
  if(m_pConnection==NULL)
   cerr<<"Lind data ERROR!\n";
  // 创建记录集对象
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  // 取得表中的记录
  m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
  adOpenDynamic,adLockOptimistic,adCmdText);
  _variant_t vsnum,vsname,vsage,vssex,vsmajor; //对应库中的snum,sname,sage,ssex,smajor
  cout << "学号 姓名 年龄 姓别 专业";
  cout << "\n----------------------------------------------------------------\n";
  while (!m_pRecordset->EndOfFile)
  {
   vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//这儿给字段编号和字段名都可以
   vsname = m_pRecordset->GetCollect("sname");
   vsage = m_pRecordset->GetCollect("sage");
   vssex = m_pRecordset->GetCollect("ssex");
   vsmajor = m_pRecordset->GetCollect("smajor");
   if (vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL
&& vssex.vt != VT_NULL && vsmajor.vt != VT_NULL)
   {
    cout.setf(ios::left);
    cout << setw(14) << (char*)(_bstr_t)vsnum;
    cout << setw(14) << (char*)(_bstr_t)vsname;
    cout << setw(8) << vsage.lVal;
    cout << setw(8) << (char*)(_bstr_t)vssex;
    cout <<setw(20) << (char*)(_bstr_t)vsmajor;
    cout.unsetf(ios::left);
    cout << endl;
   }
   m_pRecordset->MoveNext(); ///移到下一条记录
  }
  cout << "\n----------------------------------------------------------------\n";
  cout << "\n请输入你要添加的学生信息\n";
  cout << "学号:";
  cin >> student.snum;
  cout << "\n姓名:";
  cin >> student.sname;
  cout << "\n年龄:";
  cin >> student.sage;
  cout << "\n姓别:";
  cin >> student.ssex;
  cout << "\n专业:";
  cin >> student.smajor;
  m_pRecordset->MoveFirst(); //移动到第一条记录
  m_pRecordset->AddNew(); ///添加新记录
  m_pRecordset->PutCollect("snum",_variant_t(student.snum));
  m_pRecordset->PutCollect("sname",_variant_t(student.sname));
  m_pRecordset->PutCollect("sage",_variant_t(student.sage));
  m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
  m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
  m_pRecordset->Update();
  m_pConnection->Execute(query_cmd,NULL,1); //用Execute执行sql语句来删除
  m_pRecordset->Close(); // 关闭记录集
 }
 // 捕捉异常
 catch(_com_error e)
 { 
  // 显示错误信息
  cerr << "\nERROR:" << (char*)e.Description();//抛出异常
 }
 if(m_pConnection->State)
  m_pConnection->Close();
 ::CoUninitialize();
 return 0;
}
iu_81 2007-02-01
  • 打赏
  • 举报
回复
利用ADO访问MS SQL2000
要求: 【1】输出stu_info表内的每一条记录
【2】添加一条新记录
【3】删除名字为"本拉登"的记录
*/
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
#include <iostream>
#include <iomanip> //for setw()
using namespace std;
class STU
{
 public:
  char snum[10]; //学号
  char sname[10]; //姓名
  char ssex[2]; //姓别
  long sage; //年龄
  char smajor[20]; //专业
 public:
  STU(){}
  ~STU(){}
};
int main()
{
 STU student;
 ::CoInitialize(NULL); // 初始化OLE/COM库环境 ,为访问ADO接口做准备
 _RecordsetPtr m_pRecordset("ADODB.Recordset");
 _ConnectionPtr m_pConnection("ADODB.Connection");
 _bstr_t bstrSQL("select * from stu_info"); //查询语句
 char * query_cmd = "DELETE FROM stu_info WHERE sname = '本拉登'";
 try
 {
  // 创建Connection对象
  m_pConnection.CreateInstance("ADODB.Connection");
  // 设置连接字符串,必须是BSTR型或者_bstr_t类型
  _bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student; uid=sa; pwd=123;";
  //若数据库在网络上则Server为形如(192.168.1.5,3340)
  //用户sa和密码123只是针对我的库
  m_pConnection->Open(strConnect,"","",adModeUnknown);
  if(m_pConnection==NULL)
   cerr<<"Lind data ERROR!\n";
  // 创建记录集对象
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  // 取得表中的记录
  m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
  adOpenDynamic,adLockOptimistic,adCmdText);
  _variant_t vsnum,vsname,vsage,vssex,vsmajor; //对应库中的snum,sname,sage,ssex,smajor
  cout << "学号 姓名 年龄 姓别 专业";
  cout << "\n----------------------------------------------------------------\n";
  while (!m_pRecordset->EndOfFile)
  {
   vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//这儿给字段编号和字段名都可以
   vsname = m_pRecordset->GetCollect("sname");
   vsage = m_pRecordset->GetCollect("sage");
   vssex = m_pRecordset->GetCollect("ssex");
   vsmajor = m_pRecordset->GetCollect("smajor");
   if (vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL
&& vssex.vt != VT_NULL && vsmajor.vt != VT_NULL)
   {
    cout.setf(ios::left);
    cout << setw(14) << (char*)(_bstr_t)vsnum;
    cout << setw(14) << (char*)(_bstr_t)vsname;
    cout << setw(8) << vsage.lVal;
    cout << setw(8) << (char*)(_bstr_t)vssex;
    cout <<setw(20) << (char*)(_bstr_t)vsmajor;
    cout.unsetf(ios::left);
    cout << endl;
   }
   m_pRecordset->MoveNext(); ///移到下一条记录
  }
  cout << "\n----------------------------------------------------------------\n";
  cout << "\n请输入你要添加的学生信息\n";
  cout << "学号:";
  cin >> student.snum;
  cout << "\n姓名:";
  cin >> student.sname;
  cout << "\n年龄:";
  cin >> student.sage;
  cout << "\n姓别:";
  cin >> student.ssex;
  cout << "\n专业:";
  cin >> student.smajor;
  m_pRecordset->MoveFirst(); //移动到第一条记录
  m_pRecordset->AddNew(); ///添加新记录
  m_pRecordset->PutCollect("snum",_variant_t(student.snum));
  m_pRecordset->PutCollect("sname",_variant_t(student.sname));
  m_pRecordset->PutCollect("sage",_variant_t(student.sage));
  m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
  m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
  m_pRecordset->Update();
  m_pConnection->Execute(query_cmd,NULL,1); //用Execute执行sql语句来删除
  m_pRecordset->Close(); // 关闭记录集
 }
 // 捕捉异常
 catch(_com_error e)
 { 
  // 显示错误信息
  cerr << "\nERROR:" << (char*)e.Description();//抛出异常
 }
 if(m_pConnection->State)
  m_pConnection->Close();
 ::CoUninitialize();
 return 0;
}
iu_81 2007-02-01
  • 打赏
  • 举报
回复
利用ADO访问MS SQL2000
要求: 【1】输出stu_info表内的每一条记录
【2】添加一条新记录
【3】删除名字为"本拉登"的记录
*/
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
#include <iostream>
#include <iomanip> //for setw()
using namespace std;
class STU
{
 public:
  char snum[10]; //学号
  char sname[10]; //姓名
  char ssex[2]; //姓别
  long sage; //年龄
  char smajor[20]; //专业
 public:
  STU(){}
  ~STU(){}
};
int main()
{
 STU student;
 ::CoInitialize(NULL); // 初始化OLE/COM库环境 ,为访问ADO接口做准备
 _RecordsetPtr m_pRecordset("ADODB.Recordset");
 _ConnectionPtr m_pConnection("ADODB.Connection");
 _bstr_t bstrSQL("select * from stu_info"); //查询语句
 char * query_cmd = "DELETE FROM stu_info WHERE sname = '本拉登'";
 try
 {
  // 创建Connection对象
  m_pConnection.CreateInstance("ADODB.Connection");
  // 设置连接字符串,必须是BSTR型或者_bstr_t类型
  _bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student; uid=sa; pwd=123;";
  //若数据库在网络上则Server为形如(192.168.1.5,3340)
  //用户sa和密码123只是针对我的库
  m_pConnection->Open(strConnect,"","",adModeUnknown);
  if(m_pConnection==NULL)
   cerr<<"Lind data ERROR!\n";
  // 创建记录集对象
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  // 取得表中的记录
  m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
  adOpenDynamic,adLockOptimistic,adCmdText);
  _variant_t vsnum,vsname,vsage,vssex,vsmajor; //对应库中的snum,sname,sage,ssex,smajor
  cout << "学号 姓名 年龄 姓别 专业";
  cout << "\n----------------------------------------------------------------\n";
  while (!m_pRecordset->EndOfFile)
  {
   vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//这儿给字段编号和字段名都可以
   vsname = m_pRecordset->GetCollect("sname");
   vsage = m_pRecordset->GetCollect("sage");
   vssex = m_pRecordset->GetCollect("ssex");
   vsmajor = m_pRecordset->GetCollect("smajor");
   if (vsnum.vt != VT_NULL && vsname.vt != VT_NULL && vsage.vt != VT_NULL
&& vssex.vt != VT_NULL && vsmajor.vt != VT_NULL)
   {
    cout.setf(ios::left);
    cout << setw(14) << (char*)(_bstr_t)vsnum;
    cout << setw(14) << (char*)(_bstr_t)vsname;
    cout << setw(8) << vsage.lVal;
    cout << setw(8) << (char*)(_bstr_t)vssex;
    cout <<setw(20) << (char*)(_bstr_t)vsmajor;
    cout.unsetf(ios::left);
    cout << endl;
   }
   m_pRecordset->MoveNext(); ///移到下一条记录
  }
  cout << "\n----------------------------------------------------------------\n";
  cout << "\n请输入你要添加的学生信息\n";
  cout << "学号:";
  cin >> student.snum;
  cout << "\n姓名:";
  cin >> student.sname;
  cout << "\n年龄:";
  cin >> student.sage;
  cout << "\n姓别:";
  cin >> student.ssex;
  cout << "\n专业:";
  cin >> student.smajor;
  m_pRecordset->MoveFirst(); //移动到第一条记录
  m_pRecordset->AddNew(); ///添加新记录
  m_pRecordset->PutCollect("snum",_variant_t(student.snum));
  m_pRecordset->PutCollect("sname",_variant_t(student.sname));
  m_pRecordset->PutCollect("sage",_variant_t(student.sage));
  m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
  m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
  m_pRecordset->Update();
  m_pConnection->Execute(query_cmd,NULL,1); //用Execute执行sql语句来删除
  m_pRecordset->Close(); // 关闭记录集
 }
 // 捕捉异常
 catch(_com_error e)
 { 
  // 显示错误信息
  cerr << "\nERROR:" << (char*)e.Description();//抛出异常
 }
 if(m_pConnection->State)
  m_pConnection->Close();
 ::CoUninitialize();
 return 0;
}
Visual C++是Microsoft Visual Studio开发组件中最为强大的编程工具。在数据库领域,其表现也异常突出,它不仅提供了多种数据库开发技术,支持几乎所有的数据库系统,如SQL Server,DB2,Sybase,FoxPro,Access等,还提供了良好的开发环境和丰富的文档支持。 SQL Server 2000是在SQL Server 7.0的基础上扩展升级的产品,是一款面向高端的数据库管理系统,它不仅继承了SQL Server 7.0版的稳定性、便于管理和易于开发等优势,同时又具有许多新特性,赢得了众多客户的喜爱。 本书面向初、中级用户,由浅入深地讲解了使用Visual C++和SQL Server共同开发数据库系统的技术。全书共12章,内容包括Visual C++数据库访问基础的介绍,数据库基础及SQL语言的讲解,以及各种实例的具体应用。 第1章讲解了Visual C++数据库访问基础。首先讲解了面向对象的程序设计,以及Visual C++的基本知识,然后讲解了使用Visual C++开发数据库的优势和这些开发技术的种类,最后通过实例展示了ADO的数据库控件的使用方法。 第2章讲解了SQL Server 2000 数据库管理。主要讲述了SQL Server 2000关系数据库系统的有关知识,包括数据库服务器配置、数据库对象管理、数据库维护等内容。在后面章节中,将通过使用Visual C++进行的实例开发来帮助读者掌握和巩固SQL Server的使用方法和技巧。 第3章讲解了数据库基础及SQL语言。从回顾数据库的发展历程开始,简单介绍了数据库的分类和操作方式,并对数据库操作语言SQL进行了详细介绍。 第4~11章按照软件工程的应用步骤阐述了数据库系统的开发过程和技巧。各个数据库应用案例如下: ● 客户资源管理系统 ● 企业备忘录管理系统 ● 图书馆管理系统 ● 设备管理系统 ● 员工培训管理系统 ● 公司贸易管理系统 ● 餐饮管理系统 ● 宾馆管理系统

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧