Sql Express SQL 驱动程序连接C++
Sql express SQL driver connect C++
大家好,我一直在互联网上寻找如何将C++代码与SQLEXPRESS数据库连接,我已经阅读了一些关于如何连接的线程,但...我不能跟随他们中的任何一个...他们也不是在为我工作。
我不想对数据库使用 MFC 或任何类型的C++方法,我想通过原始编码来完成。
问题:
-
可通过Visual Studio和Microsoft SQL连接的数据库服务器工作室,我可以随心所欲地添加或删除表格,我相信数据库照原样,工作正常
-
C++代码在这里"我正在连接到本地数据库"
-
我从其中一个线程中获取了此代码,但无法弄清楚如何执行SQLDriverConnect,
-
我在C++很菜鸟...在此基础上添加 SQLEXPRESS...
编辑:
- 我不知道连接代码中的那个 3055 是什么......
提前感谢您的帮助
数据库信息:
UDL: 这是我从UDL得到的
( Provider=SQLOLEDB.1;Integrated Security=SSPI;
Persist Security Info=False;User ID=sa;Initial Catalog=Holpa;Data Source=AMH )
Microsoft服务器:
Server type: Database Engine
Server name: AMH
Authen: SQL server Authen
Login: sa
password : amh999
VisualStudio:
Data Source=AMH;Initial Catalog=Holpa;User ID=sa;Password=***********
.NET Framework Data Provider for SQL Server
Open
Microsoft SQL Server
Owner sa
在本地计算机上运行。
#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
using namespace std;
SQLHANDLE sqlenvhandle = SQL_NULL_HANDLE;
SQLHANDLE sqlconnectionhandle = SQL_NULL_HANDLE;
SQLHANDLE sqlstatementhandle = SQL_NULL_HANDLE;
SQLRETURN retcode;
void show_error(RETCODE rc, SQLHENV hEnv, SQLHDBC hDbc,
SQLHSTMT hStmt, const char *action)
{
SQLWCHAR szMessage[256];
SQLWCHAR szState[6];
SDWORD sdwNative;
SWORD swMsgLen;
SQLError(hEnv, hDbc, hStmt, szState, &sdwNative, szMessage,
sizeof(szMessage), &swMsgLen);
wcout << "wcout MESSAGE: " << szMessage << "n SQLSTATE " << szState << endl;
printf("Error %d performing %sn SQLState=%snSQL message=%sn",rc, action, szState, szMessage);
}
void CloseSQL()
{
SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle);
SQLDisconnect(sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle);
SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle);
}
int main()
{
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle))
{
printf("huh n");
CloseSQL();
goto END;
}
if (SQL_SUCCESS != SQLSetEnvAttr(sqlenvhandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0))
{
printf("huh n");
CloseSQL();
goto END;
}
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle))
{
printf("huh n");
CloseSQL();
goto END;
}
printf("Driver Initialisedn");
SQLWCHAR retconstring[1024];
printf("about to Driver Conneectn");
retcode = SQLDriverConnect(sqlconnectionhandle,
NULL,
(SQLWCHAR*)"DRIVER={SQL Server};SERVER=AMH, 3055;DATABASE=Holpa;UID=sa;PWD=amh999;",
SQL_NTS,
retconstring,
1024,
NULL,
SQL_DRIVER_NOPROMPT);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("Connection maden");
}
else
{
show_error(retcode, sqlenvhandle, sqlconnectionhandle, sqlstatmenthandle, "Connecting.");
}
END:
printf("n");
printf("Program End, press enter key to exit!");
getchar(); // waits for input
return 0;
}
错误:错误代码不是常量...他们不断变化...示例我得到了以下内容:消息: 0022E1ECSQLSTATE: 0022e9f4
重新运行程序消息: 009fdc4cSQLSTATE: 009fe454
重新运行代码消息: 00aadd90SQLSTATE: 00aae598
首先,您需要一个有效的诊断函数:
void show_error(RETCODE rc, SQLHENV hEnv, SQLHDBC hDbc,
SQLHSTMT hStmt, const char *action)
{
char szMessage[256];
char szState[6];
SDWORD sdwNative;
SWORD swMsgLen;
SQLError(hEnv, hDbc, hStmt, szState, &sdwNative, szMessage,
sizeof(szMessage), &swMsgLen);
printf("Error %d performing %sn"
"SQLState=%snSQL message=%sn",
rc, action, szState, szMessage);
}
如果出现任何问题,请调用它,例如:
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
printf("Connection maden");
}
else
{
show_error(retcode, sqlenvhandle, sqlconnectionhandle, sqlstatmenthandle, "Connecting.");
}
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 提升 ASIO - io_service 不要等待连接到线程
- WinSock2:connect() 提供"连接被拒绝"
- 升压信号2将插槽传递到成员功能以断开连接