團隊項目:VS2013和SQL Server2012的連接使用


由於團隊項目是要開發一款多人網游,所以需要用到注冊頁面,同時游戲內的一些實時數據也全要記錄在數據庫中

所以,最近學到了VS2013和SQL Server2012的連接,先附上代碼:

#include "stdafx.h"
#include "stdlib.h"
#include <stdio.h>   
#include <string.h>   
#include <windows.h>  
#include <sql.h> 
#include <sqlext.h>   
#include <sqltypes.h>   
#include <odbcss.h>   
#include <iostream>
using namespace std;

SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
RETCODE retcode;

bool link()
{
    
    UCHAR
        szDSN[SQL_MAX_DSN_LENGTH + 1] = "lxd123",
        szUID[MAXNAME] = "sa",
        szAuthStr[MAXNAME] = "123";
    retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
    retcode = SQLConnect(hdbc1, szDSN, (SWORD)strlen((char*)szDSN), szUID, (SWORD)strlen((char*)szUID), szAuthStr, (SWORD)strlen((char*)szAuthStr));
    if ((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO))   {
        return false;
    }
    return true;
}

void input(char *ID,char *password)
{
    SQLINTEGER   p;
    UCHAR    pre_sql[50] = "insert into internet values(?,?)";
    retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
    p = SQL_NTS;
    SQLPrepare(hstmt1, pre_sql, 50);
    SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(ID), 0, ID, 0, &p);
    SQLBindParameter(hstmt1, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(password), 0, password, 0, &p);
    SQLExecute(hstmt1);
    SQLCloseCursor(hstmt1);
    SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);
    SQLDisconnect(hdbc1);
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
    SQLFreeHandle(SQL_HANDLE_ENV, henv);
}

void Register(char *ID,char *password)
{
    bool b = true;
    SQLINTEGER   p;
    CHAR getID[50],getpassword[50];
    int set_num = 0;
    UCHAR    inquiry[70] = "select ID from internet where ID=\'";
    strcat((char*)inquiry, ID);
    strcat((char*)inquiry, "\'");
    retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
    p = SQL_NTS;
    SQLPrepare(hstmt1, inquiry, strlen((char*)inquiry));
    SQLExecute(hstmt1);
    while (SQL_NO_DATA != SQLFetch(hstmt1)) //移動光標,一直到集合末尾  
    {
        SQLGetData(hstmt1, 1, SQL_C_CHAR, getID, 50, &p);
        b = false;
    }
    if (b==false)
    {
        printf("注冊失敗");
        system("pause");
    }
    else
    {
        input(ID,password);
        printf("注冊成功");
        system("pause");
    }
    SQLCloseCursor(hstmt1);
    SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);
    SQLDisconnect(hdbc1);
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
    SQLFreeHandle(SQL_HANDLE_ENV, henv);
    system("pause");
}



int _tmain(int argc, _TCHAR* argv[])
{
    link();
    Register("ji5jin45","7979lxd");
    return 0;
}

首先這是一個注冊系統的實現:

第一步,配置ODBC服務器:

Win+R鍵打開運行菜單,輸入odbcad32,點擊回車

 

 

點擊添加

選擇SQL Server Native Client 11.0

編輯數據庫的名字,Server選擇SQL Server服務器的名字

輸入SQL Server的用戶名和密碼(一定要與SQL Server的登錄名和登陸密碼一致)

配置成功,在這個菜單里就可以看見你所有的SQL Server的數據庫,選擇你需要連接的數據庫即可,然后一直下一步

第二步,在VS2013端編輯代碼

bool link()
{
    
    UCHAR
        szDSN[SQL_MAX_DSN_LENGTH + 1] = "lxd123",  //服務器定義的名字
        szUID[MAXNAME] = "sa",  //數據庫登錄名 
        szAuthStr[MAXNAME] = "1231231";   //數據庫登陸密碼
    retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);  //定義連接變量
    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);  //定義句柄
    retcode = SQLConnect(hdbc1, szDSN, (SWORD)strlen((char*)szDSN), szUID, (SWORD)strlen((char*)szUID), szAuthStr, (SWORD)strlen((char*)szAuthStr));
    if ((retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO))   {
        return false;
    }
    return true;
}

這個是程序與數據庫的連接代碼,hdbc1是連接數據庫的句柄,這個概念之后會解釋到,如果前面設置沒有錯誤的化,這里應該順利連接

void input(char *ID,char *password)
{
    SQLINTEGER   p;  //數據庫輸入變量
    UCHAR    pre_sql[50] = "insert into internet values(?,?)";  //傳遞給數據庫執行的語句
    retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);  
    p = SQL_NTS;
    SQLPrepare(hstmt1, pre_sql, 50);  //准備參數,將pre_sql賦值給hstmt1
    SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(ID), 0, ID, 0, &p); //將hstmt1傳給數據庫,讓數據庫執行表語句
    SQLBindParameter(hstmt1, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(password), 0, password, 0, &p);
    SQLExecute(hstmt1);
    SQLCloseCursor(hstmt1);
    SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);
    SQLDisconnect(hdbc1);
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
    SQLFreeHandle(SQL_HANDLE_ENV, henv);
}

這段代碼的的結果

輸入一個用戶名:zxbsba,密碼21356316

如果注冊賬戶已經存在:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM