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属性—>配置属性—>常规—>项目默认值—>字符集—>改为使用多字节字符集“。然后再次执行就成功了!