我们可以在C程序的SQL select查询中使用动态变量吗?

时间:2012-09-07 14:37:47

标签: sql c

我实际上想在C程序中执行SQL查询,SELECT查询中的变量是存储在字符串变量中的值。

例如:

void fetch_data(char var[])
{
    char COL1[]=var, COL2[]="Address", COL3[]="Name";
    SELECT COL1, COL2, COL3 FROM TABLE WHERE COL4='some value';
}

在这里,您可以看到我希望我的代码具有灵活性,以便根据变量var(我是fetch_data函数的参数)来设置不同的列名。

请告诉我这是否可以在C。

如果以上方法不可行,我想到了另一种方法:我们可以将整个SQL语句存储在一个字符串中并执行它,这样我就可以根据参数的值来修改这个字符串。函数fetch_data()

下面的代码将使我更清楚地表明我想要的内容:

void fetch_data(char var[])
{
    char COL1[]="Name", COL2[]="Address", COL3[]=var;
    char qry1[]="SELECT ", qry2[]=var, qry3=" COL2, COL3 FROM TABLE WHERE COL4='some value';";
    char str[]=strcat(qry1,qry2);
    char query[]=strcat(str,qry3);
    //now query will be having "select (value of var), COL2, COL3 FROM TABLE WHERE COL4='some value';
}

现在在上面的代码中,我可以执行存储在字符串query中的查询吗?

如果这两种方法中的任何一种都可以使用,或者是否可以通过'C'中的任何其他方法实现,请告诉我。

1 个答案:

答案 0 :(得分:2)

第二种方法肯定会有效,你只需要小心你的字符串操作。

事实上,您可以使用snprintf简化它:

snprintf(queryStr, MAX_QUERY_LENGTH,
         "SELECT %s, COL2, COL3 FROM TABLE WHERE COL4='some value';", var);

如果查询需要更加动态,即'some value'也需要来自变量,则可以添加其他格式说明符:

snprintf(queryStr, MAX_QUERY_LENGTH,
         "SELECT %s, COL2, COL3 FROM TABLE WHERE COL4='%s';", var, someValue);

准备完这样的查询之后,只需 你使用它取决于你的工具链。你在使用ODBC吗?如果是这样,那么您可以使用ODBC调用来处理您的查询,并使用ODBC驱动程序来管理与数据库的连接。否则,您使用的是哪个数据库,以及为您提供了哪些API?例如,MySQL提供了相当大的C API,oracle提供了另一个,而SQL Server提供了另一个。

对于第一个选项,您需要使用SQL preprocessor在C代码中使用类似原始SQL语句的内容,语法将取决于您使用的工具。

我还要补充一点,你不能使用如下语句复制非文字C字符串:char COL1[]=var;。相反,您需要使用像strncpy这样的字符串库方法。