c++ sqlserver 增删改查
时间: 2023-06-06 10:01:20 浏览: 126
SQL Server是一种常用的关系型数据库管理系统,支持增删改查等基本操作。
增加数据:使用INSERT语句将数据插入到数据库表中。使用INSERT INTO语句,指定要插入到哪个表以及要插入的值。INSERT INTO tablename (column1, column2, column3) VALUES (value1, value2, value3)。
修改数据:使用UPDATE语句修改数据库表中的数据。使用UPDATE语句,指定表名、要修改的列和新的值,以及选择要修改的行。UPDATE tablename SET column1=value1, column2=value2 WHERE ...。
删除数据:使用DELETE语句删除表中的数据。使用DELETE语句,指定要删除哪个表以及要删除哪些行。DELETE FROM tablename WHERE ...。
查询数据:使用SELECT语句从数据库表中检索数据。使用SELECT语句,指定要检索哪个表、要检索哪些列以及需要检索哪些行。SELECT column1, column2 FROM tablename WHERE ...。
通过这四个基本操作,我们可以对SQL Server数据库进行灵活的控制和管理,方便地操作数据。在实际开发和应用中需要根据实际需求,使用不同的SQL语句和操作,来完成数据处理和管理任务。
相关问题
C++封装ado连接sqlserver增删查改
好的,下面是一个简单的示例代码,演示如何使用C++封装ADO连接SQL Server进行增删查改操作:
```cpp
#include <iostream>
#include <windows.h>
#include <comdef.h>
#include <atlbase.h>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
class CSQLServer
{
public:
CSQLServer();
~CSQLServer();
bool Connect(const std::string& strServer, const std::string& strDatabase,
const std::string& strUser, const std::string& strPassword);
void Disconnect();
bool ExecuteNonQuery(const std::string& strSQL);
bool ExecuteScalar(const std::string& strSQL, _variant_t& vtResult);
private:
bool InitADO();
void UninitADO();
private:
_ConnectionPtr m_pConnection;
};
CSQLServer::CSQLServer()
{
InitADO();
}
CSQLServer::~CSQLServer()
{
UninitADO();
}
bool CSQLServer::Connect(const std::string& strServer, const std::string& strDatabase,
const std::string& strUser, const std::string& strPassword)
{
try
{
std::string strConnString = "Provider=SQLOLEDB.1;";
strConnString += "Persist Security Info=False;";
strConnString += "Data Source=" + strServer + ";";
strConnString += "Initial Catalog=" + strDatabase + ";";
strConnString += "User ID=" + strUser + ";";
strConnString += "Password=" + strPassword + ";";
m_pConnection->Open(strConnString.c_str(), "", "", adConnectUnspecified);
return true;
}
catch (_com_error& e)
{
std::cout << "Connect failed, error message: " << e.Description() << std::endl;
return false;
}
}
void CSQLServer::Disconnect()
{
m_pConnection->Close();
}
bool CSQLServer::ExecuteNonQuery(const std::string& strSQL)
{
try
{
_RecordsetPtr pRecordset;
pRecordset = m_pConnection->Execute(strSQL.c_str(), NULL, adCmdText);
return true;
}
catch (_com_error& e)
{
std::cout << "ExecuteNonQuery failed, error message: " << e.Description() << std::endl;
return false;
}
}
bool CSQLServer::ExecuteScalar(const std::string& strSQL, _variant_t& vtResult)
{
try
{
_RecordsetPtr pRecordset;
pRecordset = m_pConnection->Execute(strSQL.c_str(), NULL, adCmdText);
if (pRecordset->adoEOF == true)
{
vtResult.Clear();
return false;
}
vtResult = pRecordset->Fields->GetItem((long)0)->Value;
return true;
}
catch (_com_error& e)
{
std::cout << "ExecuteScalar failed, error message: " << e.Description() << std::endl;
return false;
}
}
bool CSQLServer::InitADO()
{
try
{
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
std::cout << "CoInitialize failed" << std::endl;
return false;
}
hr = m_pConnection.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
{
std::cout << "CreateInstance failed" << std::endl;
CoUninitialize();
return false;
}
return true;
}
catch (_com_error& e)
{
std::cout << "InitADO failed, error message: " << e.Description() << std::endl;
return false;
}
}
void CSQLServer::UninitADO()
{
m_pConnection.Release();
CoUninitialize();
}
int main()
{
CSQLServer sqlServer;
if (!sqlServer.Connect("localhost", "MyDatabase", "sa", "123456"))
{
return 0;
}
// 插入数据
std::string strSQL = "INSERT INTO MyTable (Name, Age) VALUES ('Tom', 20)";
sqlServer.ExecuteNonQuery(strSQL);
// 修改数据
strSQL = "UPDATE MyTable SET Age = 21 WHERE Name = 'Tom'";
sqlServer.ExecuteNonQuery(strSQL);
// 查询数据
strSQL = "SELECT Age FROM MyTable WHERE Name = 'Tom'";
_variant_t vtResult;
if (sqlServer.ExecuteScalar(strSQL, vtResult))
{
std::cout << "Tom's age is " << (int)vtResult.intVal << std::endl;
}
else
{
std::cout << "Tom not found!" << std::endl;
}
// 删除数据
strSQL = "DELETE FROM MyTable WHERE Name = 'Tom'";
sqlServer.ExecuteNonQuery(strSQL);
sqlServer.Disconnect();
return 0;
}
```
上述代码使用`CSQLServer`类封装了ADO连接SQL Server的操作,并提供了插入、修改、查询、删除数据的方法。在使用时,只需要创建一个`CSQLServer`对象,调用`Connect`方法连接数据库,然后调用相应的方法执行SQL语句即可。
注意:上述代码使用了`#import`指令引入了`msado15.dll`库,需要确保该库已经安装在您的系统中。另外,需要链接`comsupp.lib`库。
用c++连接数据库实现增删改查
要使用C++连接数据库,需要使用一个支持ODBC(Open Database Connectivity)的库,例如ODBC API或ODBC封装库(例如ODBC++或SOCI)。
这里提供一个使用ODBC API连接MySQL数据库的示例代码,实现简单的增删改查操作:
```c++
#include <iostream>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
int main()
{
// 声明ODBC连接句柄和语句句柄
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
// 初始化ODBC环境句柄
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
// 初始化ODBC连接句柄
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
SQLDriverConnect(hdbc, NULL, "DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=localhost;DATABASE=test;UID=root;PWD=123456", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
// 初始化ODBC语句句柄
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
// 插入数据
SQLExecDirect(hstmt, "INSERT INTO user (name, age) VALUES ('Tom', 18)", SQL_NTS);
// 更新数据
SQLExecDirect(hstmt, "UPDATE user SET age = 20 WHERE name = 'Tom'", SQL_NTS);
// 查询数据
SQLExecDirect(hstmt, "SELECT name, age FROM user WHERE age > 18", SQL_NTS);
SQLCHAR name[32];
SQLINTEGER age;
while (SQLFetch(hstmt) == SQL_SUCCESS) {
SQLGetData(hstmt, 1, SQL_C_CHAR, name, sizeof(name), NULL);
SQLGetData(hstmt, 2, SQL_C_LONG, &age, sizeof(age), NULL);
std::cout << name << ", " << age << std::endl;
}
// 删除数据
SQLExecDirect(hstmt, "DELETE FROM user WHERE name = 'Tom'", SQL_NTS);
// 释放句柄
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
```
以上代码需要链接ODBC库,并且需要替换连接字符串中的数据库配置信息。在实际使用中,需要根据具体的数据库类型和库的版本,使用相应的驱动程序和连接字符串。