C++网络接收数据写入SQLSERVER
所需软件:
VS、SQLSERVER 2012、NAVICAT
下载链接:
本人云盘-》
链接:https://pan.baidu.com/s/1qADgncE43sN9jhVDoaFHzA
提取码:7tng
VS:
- 创建Win32控制台应用程序项目。
- 项目属性—》常规—》字符集改成是未设置。
SQLSERVER: - 尽量一次性安装成功。
- 若第一次安装失败,应多花时间卸载干净。
- 记住配置过程中的实例名
- 安装过程中使用混合验证:密码一般为123
- 打开SQL Server配置管理器
双击右侧的服务选择服务标签即可看到启动模式,点击下拉标签可以切换为手动启动,点击确认退出。
Navicat:
是SQLSERVER的操作工具。 - 打开Navicat,点击新建链接。
- 填入基本信息,即之前的混合验证名称和密码。主机名、新建命名等。
- 新建成功后,在dbo下建表等。(如下为数据对应类型)
注意:字符串长度
ODBC数据源配置 - 在控制面板找到ODBC、选择用户DSN.
- 点击ODBC的添加按钮,选择SQL Server,这是会出现创建SQL Server的新数据源的对话框,我以local为名建立名称,选择SQL登陆的服务器,再点击下一步,选择登陆方式:网络登陆、用户输入登陆,任选(我选择用户输入登陆,以:用户名sa 密码123为例 )。
- 选择混合验证
- 选择数据库test.
- 测试数据源看是否成功。不成功则返回修改服务器与登录ID和密码。(图中画圈地方打开可找到)
使用C++访问数据库:
用VS创建控制台应用程序:
/*SQLINTEGER num1, age1;
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。*/
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>
#include <iostream>
#include<string>
#include<time.h>
#include<cstring>
#include "data_structure.h"
using namespace std;
#pragma warning( disable : 4996)
#define MAXSTRSIZE 1024
char entity[255];
char exm[1024];/*
struct msg
{
变量定义区
};
void workertianjiashuju(Message ms)
{
SQLRETURN ret; //DESKTOP - QILGJO2\MSSQLSERVER1
SQLHENV henv;//SQLHANDLE henv
SQLHDBC hdbc;//SQLHANDLE hdbc
SQLHSTMT hstmt;//SQLHANDLE hstmt
ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);//申请环境句柄
ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);//设置环境属性
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);//申请数据库连接句柄
ret = SQLConnect(hdbc, (SQLCHAR*)"local1", SQL_NTS, (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"123", SQL_NTS);//连接数据库
if (ret == *SQL_SUCCESS || ret* == SQL_SUCCESS_WITH_INFO) {
cout << "数据库连接成功" << endl;
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请SQL语句句柄
SQLCHAR sql[] = "INSERT INTO car_copy VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";//SQL操作语句问号为参数数量。
SQLLEN P = SQL_NTS;
ret = SQLPrepare(hstmt, sql, SQL_NTS);
/*ret = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 255, 0, &a, 255, &P);//逐个绑定参数
ret = SQLExecute(hstmt);//直接执行SQL语句
//cout << "zhixingwanzhiqiandadadada大大大" << endl;
if (ret == SQL_ERROR) {
cout << "数据库错误" << endl;
system("pause");
}
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
/*****************测试结构体数组********************/
cout << ">>>>>>>>>>>>>>往数据库添加信息成功" << endl;
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);//释放语句句柄
}
else printf("添加数据库操作失败!\n");
SQLDisconnect(hdbc);//断开与数据库的连接
}
else printf("连接数据库失败!\n");
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放连接句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄
}在这里插入代码片
参数绑定过程以上图为准,黑点代表默认匹配类型,空白点代表可以匹配。
[1]: https://blog.csdn.net/winnyrain/article/details/74003972
[2]: https://www.cnblogs.com/beta-data/p/4457898.html
[3]: https://www.cnblogs.com/kzloser/archive/2012/11/29/2794815.html**