VS2017操做sql server数据库
安装sql server数据库
摸鱼怪在这里就不总结了,相信大家都会,实在不行就去问问度娘吧!
摸鱼怪在这里提醒大家,如果版本太新可能会出现不兼容问题,最开始我用的是sql server2017,但版本太新VS2017无法与该数据库连接,没办法只好卸了再重装一个sql server2014。
新建一个数据库
打开sql server,点击新建查询,复制执行下面代码:
create database haha
on primary(
name = 'haha',
filename = 'D:\test\haha.mdf',
size = 10MB,
maxsize = 50MB,
filegrowth = 5MB
)
log on(
name = 'haha_log',
filename = 'D:\test\haha_log.ldf',
size = 10MB,
maxsize = 50MB,
filegrowth = 5MB
)
sql server不会帮你新建一个文件夹,你需要去D盘新建一个test文件夹,除非test文件夹已建,或者直接修改路径,这都看你的心情
新建一个表,复制执行下面代码:
use haha
create table student(
ID int primary key not null,
name varchar(10) not null,
age int not null
)
然后刷新数据库,就会发现多了一个test数据库,里面也多了一张student表。
为student表插入数据,复制执行下面代码:
insert into student
values(111,'张三',18),(222,'李四',18),(333,'老王',18);
控制面板配置ODBC数据源
ODBC就是开放数据库互连,它提供了一种标准的API方法来访问数据库管理系统(DBMS)。具体配置方法大家可以参考这篇博文。
大家如果是直接用"SQL Server身份验证“进行登录的,可以不必像博文那样新建一个用户。同时,数据源名称须和你的数据库名称一致,因为测试,这里我们就把名称改为haha。
在选择连接哪一个SQL Server?如果大家选(local)测试报错了,可以打开"SQL Server Managment Studio"在登陆界面将自己的服务器名称粘贴赋值过去试一试,摸鱼怪当初就因为服务器名称没填对掉进坑里,少了”\SQLEXPRESS“≡(▔﹏▔)≡
然后,在选择数据库这一步,点击”更改默认的数据库“,选为haha。
测试成功后,点击确定,你就会发现”用户 DSN“里多了haha,因为懒惰,这里摸鱼怪就不贴上图片了,希望大家见谅了。其他的步骤都与那片博文一致,只需注意一下上面小小的改动O(∩_∩)O
VS2017操作sql server数据库
- 首先打开VS2017,新建一个”Windows 控制台应用程序“,位置可以修改为”D:\test\“。
- 在ConsoleApplication1源文件,删除原来的main函数,添加如下代码
#include<Windows.h>
#include<string.h>
#include<sql.h>
#include<sqlext.h>
#include<sqltypes.h>
void loadDatabase()
{
SQLRETURN ret;
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT 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*)"数据库名称", SQL_NTS, (SQLCHAR*)"用户名", SQL_NTS, (SQLCHAR*)"密码", SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
std::cout << "数据库连接成功!\n";
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//申请sql语句句柄
SQLCHAR sql[] = "select * from student";
ret = SQLExecDirect(hstmt, sql, SQL_NTS);//直接执行sql语句
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
SQLINTEGER ID,age;
SQLCHAR name[20];
SQLINTEGER len_ID, len_name, len_age;
while (SQLFetch(hstmt) != SQL_NO_DATA)
{
SQLGetData(hstmt, 1, SQL_C_ULONG, &ID, 0, &len_ID);
SQLGetData(hstmt, 2, SQL_C_CHAR, name, 10, &len_name);
SQLGetData(hstmt, 3, SQL_C_ULONG, &age, 0, &len_age);
std::cout << ID << " " << name << " " << age << std::endl;
}
}
else {
std::cout << "查询失败!\n";
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);//释放语句句柄
}
else {
std::cout << "连接失败!\n";
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);//释放句柄
SQLFreeHandle(SQL_HANDLE_ENV, henv);//释放环境句柄
}
int main()
{
loadDatabase();
}
大家在这里注意一下,上面有几处需要你自己修改,”数据库名称“也就是当前我们连接的数据库”haha“,”用户名“和”密码“是你进行SQL Server身份验证的登录名和密码,大家注意修改哦ఠൠఠ
- 做完以上工作后,然后执行代码,就会发现,问题就找上门来了!(っ °Д °;)っ,主要问题描述为:“SQLCHAR *” 类型的实参与 “SQLWCHAR *” 类型的形参不兼容。补救方法就是”项目 —>ConsoleApplication1属性—>配置属性—>常规—>项目默认值—>字符集—>改为使用多字节字符集“。然后再次执行就成功了!