2012-03-22 25 views
1

我有一個變量是一個IP地址。它被保存爲我的Access 2010數據庫中的文本。我試圖用ipSrc運行這個查詢,查詢總是失敗。我的猜測是它將ipSrc看作ipSrc而不是實際的IP地址。我試着用'ipSrc',只是簡單的ipSrc,並且都重新失敗。也試過「」ipSrc「」,也失敗了。這失敗了。 '& ipSrc'。這是聲明。將變量傳遞給SQL

SQLCHAR* query = (SQLCHAR*)"SELECT tblIP.[IPAddress], tblIP.[IPType], tblIP.[IPStatus], tblIP.[IPMax] FROM tblIP WHERE tblIP.[IPAddress]= ipSrc AND tblIP.[IPType]=3 AND tblIP.[IPStatus]=1 AND tblIP.[IPMax]=0;"; 

這裏是ipSrc的定義。

translate_ip(ip_header->source_ip, ipSrc); 

使用printf將其打印輸出爲實際IP地址。

printf("\n Source  IP: %s", ipSrc); 

回答

4

沒有辦法的代碼就知道了,從你那裏有什麼,那ipSrc應該特殊處理,它只是經歷通過它原樣。

您可以嘗試將查詢字符串動態構造爲C++字符串,然後使用它來填充查詢。例如:

std::string strqry = 
     "SELECT tblIP.[IPAddress], " 
    + "  tblIP.[IPType], " 
    + "  tblIP.[IPStatus], " 
    + "  tblIP.[IPMax] " 
    + "FROM tblIP " 
    + "WHERE tblIP.[IPAddress] = '" + ipSrc + "' " 
    + "AND  tblIP.[IPType] = 3 " 
    + "AND  tblIP.[IPStatus] = 1 " 
    + "AND  tblIP.[IPMax] = 0" 
    + ";"; 

SQLCHAR *query = (SQLCHAR *)(strqry.c_str()); 

// Now use query 

並確保您可以控制ipSrc的值。否則,您將受到SQL注入攻擊(在這種情況下,您將需要使用準備/參數化語句)。