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属性—>配置属性—>常规—>项目默认值—>字符集—>改为使用多字节字符集“。然后再次执行就成功了!
-
好了,摸鱼怪能力有限,目前也只能总结到这了<(_ _)>,希望对大家有所帮助吧!大家也可以了解ODBC API的更多操作!