2012-03-22 267 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注入攻击(在这种情况下,您将需要使用准备/参数化语句)。