所用的平台是vc6.0,vs2010,sqlsever2012.
找了一晚上代码改来改去就是无法连接成功,电脑系统是win7的。希望哪位好兄弟,好姐妹能帮帮我一把。不弄出来真的很难受,像吃了屎一样。
后面自己打断点测试,发现SQLconnect函数的返回值总是SQL_ERROR.数据源名称,账号密码都没有问题。
所用的平台是vc6.0,vs2010,sqlsever2012.
找了一晚上代码改来改去就是无法连接成功,电脑系统是win7的。希望哪位好兄弟,好姐妹能帮帮我一把。不弄出来真的很难受,像吃了屎一样。
后面自己打断点测试,发现SQLconnect函数的返回值总是SQL_ERROR.数据源名称,账号密码都没有问题。
引自强大而免费的微信小程序:皆我百晓生。
连接SQL Server主要涉及以下几个方面:配置ODBC数据源、连接数据库、执行SQL语句。
1. 配置ODBC数据源
首先确保已经正确配置了ODBC数据源。在控制面板中找到“ODBC数据源”(32位或64位),点击“系统DSN”选项卡,然后点击“添加”按钮,选择“SQL Server”驱动,按照提示填写SQL Server的相关信息。
2. 连接数据库
在代码中,可以通过以下步骤来连接数据库:
这是你提供的代码中的一部分,稍作修改:
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*)"data_test", SQL_NTS, (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"12345678", SQL_NTS);
/*data_test为配置的ODBC数据源名称,这里根据自己的配置进行修改*/
if (!(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO))
{
printf("连接数据库失败!\n");
return -1;
}
// 连接成功后可以执行后续操作
3. 执行SQL语句
连接成功后,可以使用SQLExecDirect函数来执行SQL语句。在执行查询语句后,可以使用SQLGetData函数来获取查询结果。需要注意的是,SQLGetData函数需要传入几个参数,如列号、数据类型、目标缓冲区等,可以根据需要进行调整。
这是你提供的代码中的一部分,稍作修改:
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
SQLCHAR sql1[] = "use stu_info";
SQLCHAR sql2[] = "select * from student";
ret = SQLExecDirect(hstmt, sql1, SQL_NTS);
ret = SQLExecDirect(hstmt, sql2, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
SQLCHAR str1[50], str2[50], str3[50], str4[50], str5[50], str6[50];
SQLINTEGER len_str1, len_str2, len_str3, len_str4, len_str5, len_str6;
while (SQLFetch(hstmt) != SQL_NO_DATA)
{
SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &len_str1); //获取第一列数据
SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &len_str2);
SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &len_str3);
SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &len_str4);
SQLGetData(hstmt, 5, SQL_C_CHAR, str5, 50, &len_str5);
SQLGetData(hstmt, 6, SQL_C_CHAR, str6, 50, &len_str6);
printf("%s\t%s\t%s\t%s\t%s\t%s\n", str1, str2, str3, str4, str5, str6);
}
}
// 执行完毕后记得释放连接句柄和环境句柄
请根据以上步骤对你的代码进行相应修改,重点关注连接数据库的部分,确保数据源名称、用户名、密码等信息正确无误。如果还是无法连接成功,请尝试使用其他工具(如SQL Server Management Studio)来连接数据库,以确定问题是由代码还是配置引起的。
你可以在上述代码的基础上添加一个查询表的语句来检测是否能成功对 SQL Server 进行操作。以下是示例代码:
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
SQLCHAR sql[] = "SELECT * FROM your_table_name"; // 将 your_table_name 替换为你要查询的表名
ret = SQLExecDirect(hstmt, sql, SQL_NTS);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
SQLCHAR column1[50], column2[50], column3[50];
SQLINTEGER len_column1, len_column2, len_column3;
while (SQLFetch(hstmt) != SQL_NO_DATA)
{
SQLGetData(hstmt, 1, SQL_C_CHAR, column1, 50, &len_column1); // 获取第一列数据
SQLGetData(hstmt, 2, SQL_C_CHAR, column2, 50, &len_column2);
SQLGetData(hstmt, 3, SQL_C_CHAR, column3, 50, &len_column3);
printf("%s\t%s\t%s\n", column1, column2, column3);
}
}
// 执行完毕后记得释放连接句柄和环境句柄
你只需将代码中的 your_table_name
替换为你要查询的表名,然后运行程序即可查看表中的数据。如果能正常输出数据,则说明连接到 SQL Server 并成功进行了查询操作。